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