云记
首页
常用软件
操作系统
技术分享
东云生态
  • 技术网站
  • 其他
关于我们
首页
常用软件
操作系统
技术分享
东云生态
  • 技术网站
  • 其他
关于我们
  • 前端技术

    • JavaScript基础知识
    • 其他
    • 正则表达式
    • Favicon
  • 后端技术

    • 数据结构
    • 开发规范
    • 路径匹配规则
    • Java字符串
    • 二维码的生成与读取
    • 雪花算法
    • SpringBoot注解
    • SpringBoot自定义banner
    • SpringBoot日志
    • Util、POJO、domain、entity、model、dao、view、mapper、service、controller的作用和区别分析
    • SpringSecurity
  • 数据库

    • MySQL
    • Oracle
  • 面试

    • Java面试

二进制

提示

计算机在底层存储数据的时候,一律存储的是二进制的补码形式,采用该模式的原因是补码形式效率最高。

  1. 对一个整数来说,二进制原码、反码、补码相同
  2. 对一个负数来说
  • 原码:最高位为符号位,其余为数据位
  • 反码:原码的符号位不变,其他位取反
  • 补码:反码 + 1

例如:分析byte b = (byte) 150,这个b是多少?(答案:-106)

  1. int类型的4个字节的150的二进制码是00000000 00000000 00000000 10010110
  2. 将以上的int类型强制类型转换为1个字节的byte,最终在计算机中的二进制码是:10010110
  • 10010110是二进制补码形式
  • 10010101是二进制反码形式(补码-1)
  • 11101010是二进制原码形式(符号位不变,其他位取反)

将11101010(原码)转换为十进制为-106

二进制加1正常计算

  • 1 + 0 = 1
  • 0 + 1 = 1
  • 1 + 1 = 10(这里末位置为0,上一位继续加1,依次计算)

速算小技巧

负数的补码这样记,原码转补码:符号位不变,其他的从低位开始,直到遇见第一个1之前什么都不变,遇见第一个1之后保留这个1,以后按位取反。 例如:[-7]原:10000111,[-7]补:11111001 [-106]原:11101010,[-106]补:10010110

为什么Byte的范围是-128~127?

很多人对127很容易理解,但是对-128不知道怎么来的,这里告诉大家一句话,就全明白了:在补码表示中,最高位(符号位)表示数的正负,在形式上与原码相同,即 0正 1负。但补码的符号位是数值的一部分,由补码定义式计算而得。也就是说,补码的符号位参与运算。 在计算机系统中,数值一律用补码来表示和存储。以byte类型为例:数值0(无论正负)的补码标识唯一,为0000 0000,最大值:01111111=127,即2的7次方减去1;最小值:10000000即2的7次前面加个负符号:-128。 负数补码转十进制数,有三种方法(a)把符号位抛弃,取反,再加1,得到负数绝对值,转换为十进制,再加上负号即可;(b)连同符号位一起取反,再加1,得到负数绝对值,转换为十进制,再加上负号即可;(c)直接算,如:111:(-1)(2^2)+ 1(2^1)+ 1*(2^0)= -1。

最后更新时间:
贡献者: xiaozhe
下一篇
开发规范