Java基础之原反补码

原反补码

学习这个知识点之前,我们先来看一个题目:写出10的二进制形式

答案及解读:

0b 0 0(23个) 0000 1010

​ 10对应的类型为int,在计算机底层占4字节,需要32个比特位表示

​ 其中最高位为符号位,0表示正数,1表示负数

​ 剩下的31位,其中23位都为0,低8位为0000 1010 = 8 + 2 = 10

​ 连到一起,结果为正整数10

思考:-10的二进制形式如何表示?

​ 如果要表示负整数的二进制形式,则必须学习原码、反码、补码。

1)原码

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

java 复制代码
 10的原码:0 0(23) 0000 1010
-10的原码:1 0(23) 0000 1010

2)反码

  • 正数的反码与其原码相同

  • 负数的反码,在原码的基础上,保留符号位,其他位逐位取反

java 复制代码
 10的反码:	 跟10的原码相同       0 0(23) 0000 1010
-10的反码:	 拿到-10的原码, 		1 0(23) 0000 1010
			保留符号位其他位取反  1 1(23) 1111 0101 

3)补码

  • 正数的补码与其原码相同

  • 负数的补码是在其反码的末位加1

java 复制代码
 10的补码:	 跟10的原码相同       0 0(23) 0000 1010
-10的补码:	 拿到-10的反码, 		1 1(23) 1111 0101
			在反码基础上加1  	  1 1(23) 1111 0110 

特别注意:数据在计算机底层进行存储或运算,以补码方式进行!

案例展示:

java 复制代码
模拟计算机底层进行运算:-10 + 10;
计算机底层通过补码进行运算,先获取-10补码:1 1(23) 1111 0110
    							   +
    				   再获取 10补码:0 0(23) 0000 1010
    							   =
    				   结果:		1【0 0(23) 0000 0000】
结果分析:两个int类型数据相加后结果值类型仍旧是int,其中int类型表示范围为4字节32个比特位,所以上述结果中第33位的那个1被自动抛弃,只保留低32位数值,0 0(23) 0000 0000,即 0。
所以:-10 + 10 == 0

课堂练习:

​ 请写出-123的原、反、补码。

相关推荐
冷雨夜中漫步4 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴4 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再4 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
JH30735 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
m0_736919106 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手6 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
Coder_Boy_6 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934736 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy6 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
invicinble6 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat