数据在内存中的存储

   日期:2020-11-12     浏览:146    评论:0    
核心提示:目录一、整数在内存中的存储(32位系统)字节序(32位系统)1、小端字节序2、大端字节序二、判断当前主机是大端字节序还是小端?(32位系统)三、原码、反码、补码(32位系统)一、整数在内存中的存储(32位系统)在vs中我们通过调试器就可以看到内存中的详细情况进入调试阶段调试 -->窗口—>内存四个内存是四个窗口,内存1,2,3,4,都可以进入现在我们就可以看到a的地址 0x00AFFEECint型在内存中是以4个字节为单位存储的,内存中用16进制表示,就可以看到a的值

目录

    • 一、整数在内存中的存储(32位系统)
        • 字节序(32位系统)
          • 1、小端字节序
          • 2、大端字节序
    • 二、判断当前主机是大端字节序还是小端?(32位系统)
    • 三、原码、反码、补码(32位系统)

一、整数在内存中的存储(32位系统)

在vs中我们通过调试器就可以看到内存中的详细情况


进入调试阶段

调试 -->窗口—>内存
四个内存是四个窗口,内存1,2,3,4,都可以进入


现在我们就可以看到a的地址 0x00AFFEEC
int型在内存中是以4个字节为单位存储的,内存中用16进制表示,就可以看到a的值为64(16进制),10进制为100;

字节序(32位系统)

字节序简单来说,就是指超过一个字节的数据类型在在内存中的存储顺序。
研究数字的高位在内存的高地址还是低地址。

1、小端字节序

高位字节数据存放在高地址处、低位数据存放在低地址处。

在这里我们输入一个十六进制数来看看在内存中的展示情况


可以看到44存放的位置在低地址,高位的11存放在了高地址中

2、大端字节序

高位字节数据存放在低地址处、低位数据存放在高地址处。

只不过日常中,大端字节序在PC上并不是很主流

二、判断当前主机是大端字节序还是小端?(32位系统)

int isDuan(int a){ 
	
	int* p = &a;
	char* p2 = (char*)p;
	if (*p2 == 0x11){ 
		return 1;//表示大端字节序
	}
	return 0;//表示小端字节序
}
int main()
{ 
	int a = 0x11223344;
	printf("%d\n", isDuan(a));


	system("pause");
	return 0;
}

三、原码、反码、补码(32位系统)

我们在内存中先观察一个负数在内存中的存储方式

int a = -10;

在内存中我们可以看到在内存的存储的值为 f6 ff ff ff
由于我的计算机时小端字节序,它的值就为ff ff ff f6,我们再用二进制的方式进行表示

1111 1111 1111 1111 1111 1111 1111 0110
我们再来表示-10的原码:
1000 0000 0000 0000 0000 0000 0000 1010

第一位的1表示负数,0表示整数

	而在计算机中内存是按照补码的方式进行存储,

反码: 原码取反
那对于刚才的-10的原码取反得到的反码就是
1111 1111 1111 1111 1111 1111 1111 0101

首位置表示正负不进行操作。

补码: 反码+1

对于-10的反码+1我们就得到
1111 1111 1111 1111 1111 1111 1111 0110

对于补码转换成原码转换:
1111 1111 1111 1111 1111 1111 1111 1000–>补码
1000 0000 0000 0000 0000 0000 0000 0111–>反码
1000 0000 0000 0000 0000 0000 0000 1000–>反码+1

可以看到:
原码 ==> 补码 取反+1;
反码 ==> 补码 取反+1;

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服