两分钟看懂原码、反码和补码

在介绍原码、反码和补码的概念之前,有没有想过数据在内存中是如何存放的呢?

是不是定义一个a变量,赋个20给它,它在内存中就存了个20呢?

我们不妨用VS2019的调试窗口来看一下,下面的代码存放的地址。

int main()
{
   
	int a = 20;
	int b = -10;

	return 0;
}

查看a的地址存放的数值,是一个十六进制数:14 00 00 00,看到这里我非常惊讶我不是赋值20吗?为什么是这么个东西。
在这里插入图片描述
再查看a的地址存放的数值,也是一个十六进制数:f6 ff ff ff
在这里插入图片描述
到底是怎么存的?使20存成14 00 00 00,-10存成f6 ff ff ff呢?

原码、反码和补码

计算机中的有符号数有三种表示方法,即原码、反码和补码。有符号数分为正数和负数。

三种表示方法均有符号位数值位两部分,第一位是符号位,都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。

注:无符号数也有原码、反码和补码。只不过无符号数的原码、反码和补码是相同的。

正数的原码、反码和补码

有符号正数的原码、反码和补码三者相同。
10 原 码 = 10 反 码 = 10 补

你可能感兴趣的:(编程基础,编程语言)