网站首页 > 博客文章 正文
原码(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 | 反码(11111000)+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 → 10000100
- 完整编码:0 10000100 01000000000000000000000
猜你喜欢
- 2025-07-10 Go 语言结构 – 基础篇(语法、数据类型、变量、常量、运算符)
- 2025-07-10 32位浮点数(32位浮点数是什么数据类型)
- 2025-07-10 含大量图文解析及例程 | Linux下的ELF文件、链接、加载与库(上)
- 2025-07-10 go语言学习-基本数据类型(go语言详解)
- 2025-07-10 火了!西门子PLC编程比较指令学习,赶快收藏
- 2025-07-10 了解 PLC 编程中的浮点数(了解 plc 编程中的浮点数怎么算)
- 2025-07-10 【Java教程】基础语法到高级特性(java高级用法)
- 2025-07-10 如何使用 Fraction.js 解决 BigInt 的计算盲区?
- 2025-07-10 三菱plc的数据类型(PLC的基础)(三菱plc数据指令)
- 2025-07-10 计算机等级四级知识(计算机4级考试题目)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)