原反补

                                            原码反码补码的基础知识

首先了解一下计算机中的内存:

二进制中每一位 称为bit(比特位)

8bit ==> 1byte

1024byte ==> 1kb

1024kb ==> 1mb

1024mb ==> 1GB

1024GB ==> 1TB

1024TB ==> 1PB

1024PB ==> 1EB

符号位:即八位字符的第一位,1为负,0为正。

 有符号位包括负数,无符号位只有整数而已,在同一数据类型中,由于内存长度是一样的,所以无符号数比有符号数的最大值大1倍

最高位就是符号位,内存中的左边第一个数字;对一个字节来说表示真正大小的只有后七位


原码:一个数字的二进制表示形式

在内存当中,你想存储一个数字,对一个数字进行运算,那么内存开辟最小为一个字节(byte);1byte(字节) = 8bit(); 

下面拿十进制的数字8举例:
如:十进制8  转换成二进制是1000

不够八位在前面补零  所以在内存中表示为:  0000 1000

要是 -8  就把最高位改成1

所以数字-8在内存中表示为:  1000 1000

反码:除符号位, 每一位取反

 所以数字8在内存中表示为:1111 0111

 补码:正数:等于本身

如:0: 0000 0000

负数: 反码 + 1

所以数字8在内存中表示为: 1111 1000

在计算机中二进制以补码显示!




### 关于原码、反码、码和移码的详解 #### 定义概述 - **原码**是指最高位作为符号位,其余部分表示数值绝对值的一种编码方式。其中,“0”在不同情况下可能有两种不同的表达形式[^1]。 - **反码**是对原码除符号位外按位取反得到的结果。对于正数而言,其反码与其原码相同;而对于负数,则需将其数值部分逐位求反[^3]。 - **码**定义为:正数的码即是它本身的二进制形式;而负数的码则是先计算它的反码再加一所得结果[^1]。 - **移码**(偏置表示法)主要用于浮点数中的阶码表示, 是通过将真值加上某个固定常量来实现正值化处理后的编码方法[^3]。 以下是基于8比特长度下的一些典型例子: |十进制 | 原码 | 反码 | 码 | 移码 | |-------|------------|-------------|--------------|---------------| |-127 | 11111111 | 10000000 | 10000001 | 00000001 | |-2 | 10000010 | 11111101 | 11111110 | 01111110 | |-1 | 10000001 | 11111110 | 11111111 | 01111111 | |+0 | 00000000 | 00000000 | 00000000 | 10000000 | |+1 | 00000001 | 00000001 | 00000001 | 10000001 | |+126 | 01111110 | 01111110 | 01111110 | 11111110 | |+127 | 01111111 | 01111111 | 01111111 | 11111111 | 需要注意的是,在实际应用过程中为了简化运算逻辑以及统一零值的表现形式等问题考虑通常会采用码来进行内部存储与操作而不是直接使用其他几种简单直观但存在冗余情况的形式如原码或者反码等[^1]. ```python def convert_to_binary(decimal_number, bit_length=8): if decimal_number >= 0: binary_str = bin(decimal_number)[2:].zfill(bit_length) one_complement = binary_str two_complement = binary_str move_code = '1' + binary_str[1:] else: abs_decimal = abs(decimal_number) original_code = ('1' + bin(abs_decimal)[2:]).rjust(bit_length,'0') inverted_bits = ''.join(['1'if b=='0'else '0'for b in list(original_code[1:])]) one_complement='1'+inverted_bits carry_addition=int(one_complement,base=2)+1 two_complement=bin(carry_addition)[2:].zfill(bit_length)[-bit_length:] move_offset=(2**(bit_length)-decimal_number) move_code=bin(move_offset)[2:].zfill(bit_length) return { "original": original_code, "one complement": one_complement, "two complement": two_complement, "move code": move_code } example_result = convert_to_binary(-5) print(example_result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值