【OI之路】05理论知识-2原码反码补码

版权声明:本文为博主原创文章,未经博主允许不得转载,欢迎前往zory.cf获得最佳体验 https://blog.csdn.net/Zory_Programmer/article/details/78147000

建议前往我的网站获得最佳体验。

5.1.1 基本概念

字节:8各位。
字长:若干个字节。到底是几个字节?具体看是哪种CPU。
比如2010普及组第11题就假设一个字长只有一个字节8个位。
接下来原码反码补码都是建立在机器数在一个字长上的表示。
为了方便理解,我们假设字长为一个字节。
读者要注意事实上为32位CPU字长为4个字节,64位CPU字长为8个字节。

5.1.2 原码

首位为符号位,其余为真值。比如:
原码总结:
特点:简单。
范围:比如字长为8位,则范围为 11111111(-255) 至 01111111(+255)。
缺点:0有两个表示,分别为正零(00000000)和负零(10000000),给计算机计算带来不便。

5.1.3 反码

首位为符号位,其它位分正数和负数两种情况。
反码正数:所有位和原码一样;
反码负数:除了符号位和原码一样,其他位相反。
比如:77的反码表示为01001101
-77的反码表示为10110010
补码总结:同样0有两个表示,也没有原码简单,反码存在的意义就是为了连接原码补码。下来让我们看看补码是怎样的。

5.1.4 补码

分正数和负数两种情况。
补码正数:所有位和反码一样,当然也和原码一样。所以正数是:原码反码补码的表示都一样。
补码负数:等于反码加1。简单的一句话,其实很麻烦。
比如:77的补码表示为01001101(和原码反码一致)
-77的补码表示为10110011

加1之后会有进位,因为补码没有符号位,所以负零的补码表示也是00000000。
补码总结:
特点:表示比反码更麻烦。但是解决了一个问题:0只有一种表示。

原码 反码 补码
正零 00000000 00000000
负零 10000000 11111111

5.1.5 位运算

不错的参考
x^1 x是奇数就-1偶数+1
bool(x&1) 奇数返回1
x<<1 x*2
x>>1 x/2

猜你喜欢

转载自blog.csdn.net/Zory_Programmer/article/details/78147000