主要内容 #
本节课,主要讲解数据是如何存储在内存中的。
1. 原码 #
所谓“原码”其实就是指在内存中的实际电平状态(“有电 / 没电”)
所以,一个十进制数,就对应一个二进制数。
在 C++ 中,往往使用一个十六进制数来表示二进制数。想一想:你认为这是为什么呢?
输出原码 #
下面我们在代码中,来查看一下“真实的内存电平状态”,也就是“原码”。
示例程序:
#include < iostream >
#include < iomanip >
using namespace std;
int main()
{
char dashima = 40;
printf("%x\n", dashima);
cout << setbase(16) << (int)dashima << endl; // 【新语法】
cout << setbase(16) << dashima << endl; // 【新语法】dashima 是char类型,所以还是以字符形式输出
cout << setbase(10) << 50 << endl; // 【新语法】想要重新输出10进制数,需要再设置一次。
return 0;
}
#include < iostream >
#include < iomanip >
using namespace std;
int main()
{
char dashima = 40;
printf("%x\n", dashima);
cout << setbase(16) << (int)dashima << endl; // 【新语法】
cout << setbase(16) << dashima << endl; // 【新语法】dashima 是char类型,所以还是以字符形式输出
cout << setbase(10) << 50 << endl; // 【新语法】想要重新输出10进制数,需要再设置一次。
return 0;
}
#include < iostream > #include < iomanip > using namespace std; int main() { char dashima = 40; printf("%x\n", dashima); cout << setbase(16) << (int)dashima << endl; // 【新语法】 cout << setbase(16) << dashima << endl; // 【新语法】dashima 是char类型,所以还是以字符形式输出 cout << setbase(10) << 50 << endl; // 【新语法】想要重新输出10进制数,需要再设置一次。 return 0; }
相比之下,十六进制输出使用 printf 是更加方便的。
请动手,将输出的十六进制数,转化成二进制数。
再谈加法 #
现在,我们知道了,平时我们常用的十进制数值,在内存中其实都是使用二进制来表示的。
那么,我们一起来实际模拟一下计算机计算加法的过程。
十进制数:
1 + 1 = 2
||
||
\/
二进制数:
0001 + 0001 = 0002?
= 0010
十进制数:
1 + 1 = 2
||
||
\/
二进制数:
0001 + 0001 = 0002?
= 0010
十进制数: 1 + 1 = 2 || || \/ 二进制数: 0001 + 0001 = 0002? = 0010
再来看,
十进制数:
15 + 10 = 25
||
||
\/
二进制数:
1111 + 1010 = 1 1001 = 0x19
十进制数:
15 + 10 = 25
||
||
\/
二进制数:
1111 + 1010 = 1 1001 = 0x19
十进制数: 15 + 10 = 25 || || \/ 二进制数: 1111 + 1010 = 1 1001 = 0x19
习题 #