原码、反码和补码
原码、反码和补码
原码、反码和补码
-
原码:所谓原码就是符号位加上数字的二进制表示,int为例,第一位表示符号 (0正数 1负数)
例如: +7的原码为: 00000111 -7的原码为: 10000111
对于原码来说,绝对值相等的正数和负数只有符号位不同 -
反码:一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,(符号位不变化,其余位数取反)。
例如: +7的反码为:00000111 -7的反码为: 11111000 -
补码:一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,去到反码然后加1。(反码加1就是补码)
例如: +7的补码为: 00000111 -7的补码为: 11111001【总结】:
正数:它的原码、反码、补码相同
负数:反码符号位不变化,其余位数取反,补码符号位不变化其余各位原码取反(反码+1)
计算机中为什么用补码表示?
计算机采用补码是为了只设计加法运算器,不设计减法运算器,提高效率。例如1+(-1)=0,用补码直接相加即可
Java中的位运算\移位运算流程 10进制<==>
2进制原码<====>
2进制补码<==>
计算
原码、反码、补码转换
- 负数原码算补码:符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1。例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码 0000111按位取反为1111000;再加1,所以-7的补码是11111001。
- 负数补码算原码:如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。
即:补码是原码取反+1,从补码到原码就是-1再取反。
进制转换
-
常见的是十进制,计算机中还有二进制,八进制,十六进制
整数类型可以用进制表示:long, int, short, byte
八进制表示:以0作为前缀,数码有0,1,2,3,4,5,6,7,逢8进位 如:8(十进制)—>010(八进制)
十六进制表示:以0x作为前缀,数码有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,逢16进位 :如:16(十进制)—>0x10(十六进制) -
进制间转换:
二进制=>十进制:1101 —> 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 = 13
八进制=>十进制: 0123 —> 1* 8^2 + 2 * 8 + 3 = 83
十六进制=>十进制: 0x123 —> 1* 16^2 + 2 * 16 + 3 = 291二进制=>十进制:除2取余,逆序排列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!