原码 反码 补码 之间在小数正数间的转换

原码 反码 补码 之间在小数正数间的转换

基本转换

对于正数 原码等于反码等于补码(小数也一样)
对于负数 原码除了符号位取反即反码
反码基础之上+1即补码
但是在遇到某些题时候还是会混淆,比如三者在对+0,-0方面,
以及1.111 和1,111两者者的不同等 直接按机组课本的例题做例子

对0方面(对八位)

------原码反码补码
+0000000000000000000000000
-0100000001111111100000000

由图可知补码在+0与-0时候表示是一样的
平时也说过8位机器码范围是-128~127
就是因为前者对应这补码的10000000后者对应着补码的01111111
而对原码和反码其表示范围则是-127~127

基本以及分数(小数)转换

设机器字长为8位(含一个符号位),写出下列真值对应的原码反码以及补码

------原码反码补码
1000,110 01000,110 01000,110 0100
-871,101 01111,010 10001,010 1001

这是比较简单的转换 用平时学的除而取余法即可
转换和上面说的方法一样100的三者都一样 -87的三者都有差别
其次注意上面用的都是逗号 表示是整数
下面描述分数

------原码反码补码
-13/641.001 10101.110 01011.110 0110
29/1280.001 11010.110 00100.110 0011

此处符号位与之后为点
那负数为例
-13/64 直接干就完了设置为【x】原=x0 x1 x2 x3 x4 x5 x6 x7 x8
x0是符号位所以x0绝对为1
至于后面的数如下图(xi都是0或1)在这里插入图片描述
首先不管负号,2的-1和-2次方都比13/64大了所以不考虑所以x1,x2都是0,其实就是估那个数凑出能使等式相等就完了
上述的数都为1则等式左边为
1/2 + 1/4 + 1/8 + 1/16 + 1/32 + 1/64 + 1/128
等效 32/64 + 16/64 + 8/64 + 4/64 + 2/64 + 2/64 + 1/128
在这里插入图片描述
干就完了

补码整数以及小数对原反码的转换(4位为例)

补码反码原码真值补充
1.11001.10111.0100-0.0100干就完了注意是小数即可
0.11100.11100.1110+0.1110正数贼简单
1.00001.1111-1原码的局限性下同
1,01011,01001,1011-11逗号表示是整数
0,01110,01110,0111+7
1.00001.1111+16
### 小数原码反码补码表示方法 在计算机组成原理中,数值可以通过多种编码方式来表示,其中包括原码反码补码。这些编码不仅适用于整数,也适用于小数。 #### 1. 原码表示 对于小数而言,其原码形式与整数相似,符号位用于区分正负,其余部分则为绝对值的小数二进制表示。 例如,假设有一个8位系统(其中第1位是符号位),那么0.75可以被写成`0.11`的二进制形式,则它的原码为: ```plaintext 0.11000000 ``` 如果是负数 `-0.75` 的原码则是将其符号位置为 `1`,即: ```plaintext 1.11000000 ``` 需要注意的是,在实际应用中小数点的位置通常由约定决定,并不显式存储[^1]。 #### 2. 反码表示 当涉及小数时,反码的概念同样适用。具体来说: - 对于 **正数**,其反码与其原码相同; - 对于 **负数**,除了符号位外,其他所有位取反即可得到反码。 仍以前述为例,如果考虑 `-0.75` 的情况,先写出其原码 `1.11000000`,再对其非符号位逐位取反可得反码如下所示: ```plaintext 1.00111111 ``` 这一步骤遵循了基本定义中的操作逻辑[^2]。 #### 3. 补码表示 针对小数补码计算规则延续自整数体系——对于任何给定的小数: - 若该数为正值,则其补码等于自身的原码; - 如果它是负值的话,则需在其反码基础上加一形成最终结果。 继续沿用上述案例分析 `-0.75` 这个小数的情况。已知它对应的反码为 `1.00111111`,在此基础之上执行加法运算得出补码表达式如下: ```plaintext 1.01000000 ``` 值得注意的一点在于,这种处理机制确保了无论是在何种情况下都能有效支持后续可能涉及到的各种算术运算需求[^3]。 #### 示例代码展示 以下是实现这一过程的一个简单 Python 函数演示如何手动完成从小数到不同码制之间转换工作: ```python def decimal_to_binary_fraction(decimal, precision=8): binary = "" while decimal > 0 and len(binary) < precision: result = int(decimal * 2) binary += str(result) decimal = (decimal * 2) - result return "0." + binary.zfill(precision) # Example usage for converting a positive fraction to its codes. positive_decimal = 0.75 binary_positive = decimal_to_binary_fraction(positive_decimal) original_code_pos = f"0{binary_positive}" # Original code of the positive number. negative_decimal = -0.75 binary_negative = decimal_to_binary_fraction(abs(negative_decimal)) inverted_bits = ''.join(['1' if bit == '0' else '0' for bit in binary_negative.split('.')[1]]) complement_code_neg = f"1.{inverted_bits}{''.zfill(len(inverted_bits))}" print(f"Positive Decimal {positive_decimal}: Original Code -> {original_code_pos}") print(f"Negative Decimal {-negative_decimal}: Complement Code -> {complement_code_neg}") ``` 此脚本片段展示了从十进制分数向相应二进制序列转变的过程以及构建对应编码的具体做法。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值