查看“原码 反码 补码”的源代码
←
原码 反码 补码
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
原码、反码和补码是计算机中对数字的二进制表示方法。 # 原码:最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值 # 反码:正数的反码与原码相同,负数的反码为在原码的基础上,符号位不变,其余位取反 # 补码:正数的补码与原码相同,负数的补码为在反码的基础上加 1(其中 -8 定义为 1000) ===定义=== 下面以 n=4 bit 为例: ====原码==== *正数范围:[ 0 ~ 7] - (0000 - 0111),8 个数字 *负数范围:[-0 ~ -7] - (1000 - 1111) 很明显,只能表达 15 个数字,其中 0 有两个(0,-0)。 ====反码==== *负数范围:[-1 ~ -8] - (1110 - 1111) ====补码==== *正数范围:同原码 *负数范围:[-1 ~ -8] - (1111 - 1000)<br> -1 {原码:(1001) -> 反码(1110) -> 补码(1111)}<br> -8 {定义补码为(1000)} 可以表达 16 个数字,-8 ~ -1,0 ~ 7。 P.S. 因为反码与补码负数都是将原码的 -0 变成了 -8,所以极值的表达与正数有些许不同: 正数:[ 7] 2<sup>n-1</sup>-1 负数:[-8] -2<sup>n</sup> ====注意==== 负数范围,只有原码是 -0~-7,补码与反码都是 -1~-8: {| class="wikitable" |+ ! !-0 !-1 !-2 !-3 !-4 !-5 !-6 !-7 !-8 |- |原码 |1000 |1001 |1010 |1011 |1100 |1101 |1110 |1111 | |- |反码 | |1110 |1101 |1100 |1011 |1010 |1001 |1000 |1111 |- |补码 | |1111 |1110 |1101 |1110 |1011 |1010 |1001 |1000 |} ===计算=== 计算机是以补码来对数字进行表达,好处是不用复杂的计算逻辑,只需要做取反(异或)、加法就可以了。如: #5 + 2<br>= (0101) + (0010)<br>= (0111)<br>= 7 #5 - 2<br>5 + (-2)<br>=(0101) + (1110)【①0010 与 1111 异或(取反)=1101, ②+1 = 1110】<br>= (0011)【符号位参与计算,出现了进位】<br>= 3 #2 - 5<br>2 + (-5)<br>=(0010) + (1011)<br>= (1101)<br>= -3 ===溢出=== 补码运算时,符号位相同,出现进位即为溢出 *符号位=0,为上溢出 *符号位=1,为下溢出 补码运算时,若符号位不同: *出现进位,说明结果为正 *未出现进位,说明结果为负 P.S. 符号位参加运算。 ===补码的减法证明=== [[分类:Develop]] [[分类:Platform]]
返回
原码 反码 补码
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
目录
文章分类
侧边栏
帮助
工具
链入页面
相关更改
特殊页面
页面信息