赞
踩
我们知道变量的创建是要在内存中开辟空间,而空间的大小是根据不同的类型来决定的。那么数据在所开辟的内存中到底是如何存储的呢?
先来看一下下面的整数在内存中是怎样存储的
在计算机中整数有三种表达方式,即原码、反码和补码。三种表示方法均有符号位和数值位两部分组成。
符号位:都是用0表示“正”,用1表示“负”。
数值位:正整数三种表达方式都是一样的(正数的原、反、补码都相同,),负整数则各不相同。
原码:直接将二进制按照正负数的形式翻译成二进制就可以。
反码:将原码的符号位(第一位)不变,其他位依次按位取反就可以得到了。
补码:反码+1就得到补码。
对于整形数据存放内存中其实存放的是补码。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域 统一处理; 同时,加法和减法也可以统一处理(CPU只有加法器)。
来看看在内存中的存储(十六进制显示)。
我们可以看到对于a和b分别存储的是补码。但是我们发现顺序有点不对劲,这里就涉及了大小端存储问题。
什么是大小端:
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地 址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。
怎样才能知道我们用的机器是那种存储模式呢?
看以下代码
- #include <stdio.h>
- int check_sys()
- {
- int i = 1;
- return (char)i;
- }
- int main()
- {
- int ret = check_sys();
- if (ret == 1)
- {
- printf("小端\n");
- }
- else
- {
- printf("大端\n");
- }
- return 0;
- }

更多内容请移步个人博客:乌托邦
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。