标题 整形变量的数据储存
数据在计算机中的储存以二进制储存,计算机的整型数三种表示方法分为原码、反码、补码。
#include<stdio.h>
int main()
{
int a=20;//32字节,int (4个字节)
//00000000 00000000 00000000 00010100 原码
//00000000 00000000 00000000 00010100反码
//00000000 00000000 00000000 00010100 补码
int b=-20;
//10000000 00000000 00000000 00001010 原码
//11111111 11111111 11111111 11110101 反码
//11111111 11111111 11111111 11110110 补码
return 0;
}
如果在a+b用原码相加会得
a 00000000 00000000 00000000 00010100
b 10000000 00000000 00000000 00001010
*a+b 10000000 00000000 00000000 00011110 *
a+b=-30 ,显然不对
如果a+b用反码相加
a 00000000 00000000 00000000 00010100
*b 11111111 11111111 11111111 11110101
a+b 11111111 1111111 1111111 11111111
换算为原码a+b=0,也不对
如果以补码相加
a 00000000 00000000 00000000 00010100
b 11111111 11111111 11111111 11110110
a+b 00000000 00000000 00000000 00001010
a+b=10 所以计算机在内存中是以补码方式存储
而他们又是以什么方式存储的呢
而将a和b转化为十六进制
#include<stdio.h>
int main()
{
int a=20;//32字节,int (4个字节)
//00000000 00000000 00000000 00010100 原码
//00000000 00000000 00000000 00010100 反码
//00000000 00000000 00000000 00010100 补码
// 00 00 00 14 十六进制
int b=-20;
//10000000 00000000 00000000 00001010 原码
//11111111 11111111 11111111 11110101 反码
//11111111 11111111 11111111 11110110 补码
// ff ff ff f6 十六进制
return 0;
}
那为什么是反的存储呢?
计算机分为大小端存储模式,而大部分计算机是以小端存储所以才会出现相反情况。