前言
整型数据在内存中都是以补码的二进制形式存放的
一、原码、反码、补码
整数有三种表示方法:原码、反码、补码
正数和负数在内存中用符号位(首位)来区分,正数是0,负数是1,符号位以外都是数值位
1.正整数的原码、反码、补码相同
int a=10;
//00000000 00000000 00000000 00001010 原码
//00000000 00000000 00000000 00001010 反码
//00000000 00000000 00000000 00001010 补码
2.负整数
- 原码 的符号位为1
- 反码 是符号位不变,数值位全部按位取反
- 补码 是反码 +1
int a=-10;
//10000000 00000000 00000000 00001010 原码
//11111111 11111111 11111111 11110101 反码
//11111111 11111111 11111111 11110110 补码
二、整型在内存中都是以补码的形式存放的
注意:原码取反+1得到补码,补码取反+1得到原码
三、大端字节序和小端字节序
- 大端字节序:把数据的低位字节序的内容存放在高地址,高位字节序的内容存放在低地址
- 小端字节序:把数据的低位字节序的内容存放在低地址,高位字节序的内容存放在高地址
计算机默认是小端存储,小端存储可以理解成是倒着存储的
例如:
判断当前机器的字节序
int main()
{
int a = 1;
char* p = (char*)&a; //强制类型转换成 char*
if (*p == 1)
{
printf("小端\n");
}
else
printf("大端\n");
return 0;
}