Java 原码反码补码

1、学习原码反码补码的目的是为了后面学习强制类型转换;

2、有符号数据表示法的几种方式:

原码:就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小。

例如:通过一个字节,也就是8个二进制位表示+7和-7:

+7:0(符号位)0000111
-7:1(符号位)0000111

反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

注意:我们计算是通过补码的形式计算的。

注意:负数通过补码求原码:减一取反。

3、例子:我们求 ±7 的反码和补码:

正数的原码反码补码都相同:+7 的原反补都为:00000111

-7的原码:10000111

-7的反码:11111000(在原码的基础上取反,符号位不变)

扫描二维码关注公众号,回复: 11349762 查看本文章

-7的反码:11111001(在补码的基础上末位+1)

4、验证 ±7 补码相加是否为0:

+7(补码) 0 0000111
-7(补码) 1 1111001
----------------------
         10 0000000

最后的计算结果为10 0000000,我们用一个字节来表示第八位为最高位,1超出第八位被忽略,所以00000000为0;

5、练习:

练习1:已知原码求补码:0b10110100

分析:0b为二进制前缀,1为符号位为负,负数要先求反码再求补码;

反码:0b11001011

补码:0b11001100

练习2:已知补码求原码:0b11101110

分析:0b为二进制前缀,1为符号位为负;

注意:负数已知补码求原码:减1取反。

补码:0b11101110

反码:0b11101101(在补码的基础上减一)

原码:0b10010010(反码取反)

猜你喜欢

转载自blog.csdn.net/weixin_44296929/article/details/106896999