原码、反码和补码

原码、反码和补码

原码、反码和补码

  • 原码:所谓原码就是符号位加上数字的二进制表示,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取余,逆序排列

posted @   Faetbwac  阅读(457)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示