整型在内存中的存储,即二进制中原码、反码、补码介绍

  • Post author:
  • Post category:其他


整数的表示方法

在计算机当中,整数有三种表示方法就是这次所说的,

原码



反码



补码

三种表示方法均都包括符号位和数值位两部分,符号位中用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就能知道储存类型是大端还是小端。



版权声明:本文为luoye123123123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。