原码 补码 反码

计算机中的符号数有三种表示方法:原码、补码、反码。这三种表示方法都由符号位数值位两部分组成,符号位1表示负数,0表示正数。

二进制数在内存中是以补码的形式存放的。为了更好理解计算机内部的运算,可以将其理解为二进制的补码的运算。
而我们日常所用的是十进制,日常从十进制转换成的二进制为二进制原码。

引入补码和原码是为了理解计算机运算,更方便计算机做减法,所以补码和反码的定义是指定的,无需证明。

反码:正数的反码为其本身,负数的反码是其原码除了符号位外全部按位取反。
补码:正数的补码为其本身,负数的补码是将其原码的反码+1。
补码求原码:就是对该补码再求补码得到的就是其原码。

注意:反码是不包含符号位的按位取反,和全部的按位取反是不一样的。

位运算

位运算有四种:按位与&、按位或 | 、按位异或^、按位非~

  1. & :任意二进制位与0进行&运算,结果是0;与1进行&运算,结果是其原值。a&0 = 0;a&1 = a。
  2. | :任意二进制位与0进行 | 运算,结果为其原值;与1进行 | 运算,结果为1。a | 0 = a;a | 1 = 1。
  3. ^ :任意相同二进制位进行^运算,结果为0;任意不同二进制位进行 ^ 运算,结果为1。
元素1元素2&结果I 结果^结果
01011
10011
00000
11110
  1. ~ :按位取非,~ a = -(a+1)
    ~正数:①正数的二进制全部(包含符号位)按位取反(不是求反码),②对取反后的值除了符号位再取反即求反码,③+1。(其实就是取反符号位后+1)
    ~负数:①负数的二进制全部(包含符号位)按位取反,②+1,③不包含符号位再取反。

参考:按位取非的计算详解

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐