整数的表示方法
在计算机当中,整数有三种表示方法就是这次所说的,
原码
、
反码
、
补码
。
三种表示方法均都包括符号位和数值位两部分,符号位中用0表示“整数”,用1表示“负数”。
而且我们符号位为0也就是
正数的原码、反码、补码都相同
;
但
负整数也就是符号位为1的整数,三种表示方法就各不相同了
。
如上例,0->正数、1->负数。
原码
:直接将数值按照正负数的形式翻译成二进制就得到原码。
反码
:将原码的符号位不变,其他位按位取反就得到反码。
补码
:给得到的反码+1就可以得到补码,
一般我们在内存中储存的就是补码。
不过我们现在知道从原码到补码只有一种方式,就是把原码数值位按位取反然后在+1,但是从补码到原码有两种方式。
1、可以将补码反向操作,先-1再取反得到原码。
2、也可以将补码再次取反+1,也能得到相应原码。
知道了原码、反码、补码,那接下来还要知道大小端字节序
如果一个数值超过一个字节,那它要存储到内存中,就要有顺序的区分。
大端储存模式下,数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中;
小端储存模式下,数据低位保存在内存低位,数据高位保存在内存高位;
那如果想要判断,我们的储存模式是大端还是小端怎么办呢?
看下面这段代码↓↓↓↓
int main()
{
int a = 1;
char* p = (char*)&a;
if (*p == 1)
printf("小端");
else
printf("大端");
return 0;
}
将int类型的a强制转换成char类型
我们知道char类型只占1个字节
所以说只要判断出a首地址是不是1就能知道储存类型是大端还是小端。