在介绍原码、反码和补码的概念之前,有没有想过数据在内存中是如何存放的呢?
是不是定义一个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补码=0101010原码=10反码=10补码=01010

本文介绍了计算机中正数和负数的原码、反码和补码表示方式,特别是负数的转换规则。强调了在内存中实际存储的是补码,因为补码允许加法和减法操作统一处理,避免了使用原码可能出现的错误。文章通过实例展示了数值在内存中的存储形式,并提到了大端和小端存储模式。
最低0.47元/天 解锁文章
2738

被折叠的 条评论
为什么被折叠?



