大家好,欢迎来到IT知识分享网。

原码(Sign-Magnitude)
原码是最直观的编码方式,它的最高位是符号位(0表示正数,1表示负数),其余位表示数值本身的绝对值。
- 表示
原码采用最直观的符号-绝对值表示法:
- 符号位(最高位):0表示正数,1表示负数
- 数值位(其余位):存储数二进制形式绝对值
特点:
- 表示范围:-(2^(n-1)-1) 到 +(2^(n-1)-1)
- 缺陷:存在双零问题,加减运算也需要判断符号位
2. 转换
- 正数转换:直接转换为二进制,不足位补零
- 负数转换:取绝对值的二进制形式,最高位 置1,数值位保持原值
3. 示例
十进制 |
8位原码 |
计算过程 |
+7 |
0000 0111 |
直接转换7的二进制 |
-13 |
1000 1101 |
1(符号位) + 0001101(13的二进制) |
0 |
0000 0000 |
0000 0000 或1000 0000 |
反码(Ones’ Complement)
反码的表示方法对正数和原码相同,而对负数则是将其原码除符号位外的所有位取反。反码的设计初衷是为了解决原码在进行减法运算时的问题,使得任何数与其相反数相加等于零。
1. 表示
反码通过取反操作可以改进运算:
- 正数:与原码相同
- 负数:符号位保持1,数值位按位取反
特点:
- 加法需要循环进位:比如 5(0101) + (-2)(1101) = 1 0010 → 0011(3)
- 表示范围和原码相同,也就是说仍存在双零的缺陷
2. 示例
十进制 |
原码 |
反码 |
转换过程 |
+9 |
0000 1001 |
0000 1001 |
正数保持原码 |
-6 |
1000 0110 |
1111 1001 |
符号位1,数值位0110取反 |
0 |
0000 0000 |
1111 1111 |
仍然存在双零问题 |
补码(Two’s Complement)
补码是目前计算机系统中普遍采用的编码方式,因为它能简化加法和减法的硬件实现。正数的原码、反码、补码三者相同,而负数的补码则是在其反码的基础上加1。补码的引入,解决了负零的问题,并且能够多表示一个最小值。
- 表示
补码有如下公式(数字定义):

特点:
- 单零表示:0的补码唯一(00000000)
- 运算简便:A – B = A + (-B)补
- 范围:能比原码和补码多表示一个最小值
2. 转换
- 普通方法
原码 → 补码: 正数:保持原码不变 负数:转换为反码后+1
- 公式计算法
整数补码 = x
负数补码 = 2^n – |x|
3. 示例
十进制 |
原码 |
反码 |
补码 |
计算验证 |
+19 |
0001 0011 |
0001 0011 |
0001 0011 |
直接保留原码 |
-7 |
1000 0111 |
1111 1000 |
1111 1001 |
反码()+1 |
-128 |
无法表示 |
无法表示 |
1000 0000 |
2^8 – 128 = 128 |
移码
移码一般用来比较大小,比如浮点数的阶码会用移码表示,通过移码的表示,较出大小变得简单直观。
1. 表示
移码通过偏移量解决指数比较问题:
– 统一公式:移码 = 真值 + 偏移量(通常为2^(n-1))
– IEEE754 标准中 偏移量为移码形式:单精度 127(8位),双精度 1023(11位)
2. 转换
1. 确定偏移量:一般为 2^(k-1),k为位数 2. 计算移码值:E = 真值 + 偏移量
3. 示例
真值 |
8位移码(偏移127) |
计算过程 |
二进制 |
+23 |
150 |
23 + 127 = 150 |
1001 0110 |
-5 |
122 |
-5 + 127 = 122 |
0111 1010 |
0 |
127 |
0 + 127 = 127 |
0111 1111 |
4. 扩展 —— 浮点中移码的应用
以单精度浮点数 1.25×2^5 为例:
- 指数真值:5
- 移码表示:5 + 127 = 132 →
- 完整编码:0 000000000000
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/182147.html