Java原码、反码和补码

原码、反码和补码、计算
首先我们明白计算机存储任何数据都是采用二进制的形式,原码就是我们的数据存储到计算机中的二进制形式,第一位是符号位,用0来表示正数,用1来表示负数。
1、原码
例如:2 的原码可以表示为:0-----0010
正数的原码、反码、补码都是一样的。
2、反码
负数的反码=他的原符号位不变,其他位置取反,也就是(0->1,1->0)
负数的反码=负数补码-1
3、补码:
负数的补码=它的反码+1
4、重点是来说一下计算
Java没有无符号数,换言之,Java中的数据都是有符号的
原码的计算不做过多说明和练习
反码:
1、

System.out.println(~ 2);//输出为-3,大家可以试一试
//2的原码为0010,2的反码为0010,在得到2的补码为0010,取反的到1101,因为是负数
//那就要先得到取反(补码)之后的反码=负数的补码 - 1 => 1100,再得到原码1011
### 负数补码反码的关系及计算方法 对于负数而言,其补码反码之间存在一定的转换关系。具体来说: #### 补码反码的转换 如果已知一个负数的补码,则可以通过将其最低有效位减去1来获得该数的反码。这一过程实际上是基于补码定义的一种逆向操作[^4]。 例如,假设有一个8位二进制表示的负数 `-5` 的补码为 `11111011`,那么通过对其执行减一的操作即可得到其反码: ```plaintext 11111011 (补码) - 1 --------- 11111010 (反码) ``` #### 反码补码的转换 反之,当给定的是某个负数的反码时,只需对该数值加上1便能求得相应的补码形式[^4]。继续以上述例子为例,若初始状态下的数据是以反码呈现即 `11111010` ,则增加单位量之后的结果便是前述提到过的补码形态——`11111011`。 这种互转机制不仅简化了计算机内部关于整型变量存储结构的设计思路,同时也使得算术逻辑单元(ALU)能够更加高效地完成各种基础运算任务,比如加减乘除等基本功能模块构建都得益于这样的编码体系支持[^3]。 以下是用于演示如何在Python程序中实现上述两种变换的一个简单函数示例: ```python def twos_complement_to_ones_complement(twos_comp_str): """Convert two's complement binary string to one's complement.""" ones_comp_int = int(twos_comp_str, 2) - 1 return format(ones_comp_int & ((1 << len(twos_comp_str)) - 1), 'b').zfill(len(twos_comp_str)) def ones_complement_to_twos_complement(ones_comp_str): """Convert one's complement binary string to two's complement.""" twos_comp_int = int(ones_comp_str, 2) + 1 return format(twos_comp_int & ((1 << len(ones_comp_str)) - 1), 'b').zfill(len(ones_comp_str)) # Example usage: print("Two's Complement -> One's Complement:") example_two = "11111011" converted_one = twos_complement_to_ones_complement(example_two) print(f"{example_two} => {converted_one}") print("\nOne's Complement -> Two's Complement:") example_one = converted_one reverted_two = ones_complement_to_twos_complement(example_one) print(f"{example_one} => {reverted_two}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值