vs(visual studio)编译器中,内存窗口打开方式及介绍
1、进入调试状态
2、点击调试按钮
3、划入窗口,找到内存,4个窗口等价,凭借喜好点开一个
打开内存窗口后就会有如下界面:
其中左边的部分代表地址
这些16进制的数字就是内存的地址了
中间的是用16进制数字的形式表示的内存中的数据
(之所以用16进制显示,可能是因为比较整齐,便于使用者,但是在存储的时候是按照2进制存储的)
为了方便大家观看,这张图把左边的地址也截了下来,这张图里左边的地址指向每一行第一个元素
而右侧的是以字符形式展示的内存,跟中间的意义一样,为了方便查看内存中的字符而存在
1、字节序
整形数据在内存中的存储,比如 int 类型占有4个字节,当我们创建一个int 变量的后,运行程序,就会有一块专门的内存来存放这个数据,这里为用vs编译器的调试功能内存窗口展示给大家,如下:
//例如我们可以创建一个整形变量a,初始化为10 int a = 10;
我们可以直接在内存窗口中搜索我们刚刚创建的变量a
在地址一栏中,我们可以输入要查找的地址,可以直接输入地址,也可以输入表达式,比如&a即为变量a的地址
我们可以看到a中的值是 0a 00 00 00(4个字节,每个字节一共8个bit位,恰好是每两个空格之间代表一个字节)
第一个字节里的内容是 0a,翻译成10进制就是10,
其余字节里都是0。
这就是我们在a 中存储的数据,可以看到,它在存储的时候是:存储是以字节为单位的,同时排在前面的字节存储较低位的数据的,
这种 “排在前面的字节存储较低位的数据” 的存储方式,我们叫它“小端序”
同理,如果“排在前面的字节存储较高位的数据”叫“大端序”
大家可以看到,我的电脑是小端序的存储方式
文字毕竟啃得不是很舒服,来操作一下
//为了更加直观,我们直接存16进制的数字 int b = 0x11223344; int c = 0x55667788;
开始调试!
这是b
这是c
再来一个d吧?
为了证明是以字节为单位的,我们让d这样
int d = 0x12345678;
调试!
果然,结果是 78 56 34 12
除了存储外,我们的电脑需要通过网络接收以及发送数据,这个接收和发送的方式都是大端序的。
2、补码
在上面的基础上,我们加一行代码:
int e = -1;
然后调试,结果如下:
???
按照16进制的数字翻译过来这显然是一个很大的数字啊,怎么就是-1了?
这个就要跟我们的补码联系起来了
因为,数据在内存中是以补码的形式来储存的
这里有两点要说
1.正数整形的补码为自身
2.负数整形的补码为对应的二进制数字按位取反,再加一
这样以来,是不是就解释通了?
那么为什么要这样,
为了计算方便,在我们的电脑上有一个加法器,用来实现加法运算,而减法也是用加法器完成的,然而为什么不直接设计个减法器呢?,因为硬件设备的成本要比软件程序高,为了减少硬件成本,我们就在软件上下功夫,于是有了补码。补码的存在可以让加法器计算减法,甚至乘法和除法。
1、存储方式:科学计数法
float类型的浮点数4个字节一共32个bit位分配如下:
第1个,符号
2~9,整数
10~32,2的E次方
而double类型有64个bit位:
第1个符号
2~12,整数
13~64,2的E次方
可以通过代码测试:
float f = 21.3; double g = 21.345;
这样,
f如下
g如下:
不过一般来说,浮点型是不够精确的,我们可以举个例子,这里打开Python示范一下
如下:
可以看到,浮点型并没有给出一个理想中的数字,所以我们在计算的时候并不优先考虑浮点型