侧边栏壁纸
博主头像
此昵称不存在 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

原码、反码、补码及位运算

Administrator
2022-12-04 / 0 评论 / 0 点赞 / 97 阅读 / 0 字 / 正在检测是否收录...

原码、反码、补码

  1. 二级制的最高位是符号位:0表示负数, 1表示正数
  2. 正数的原码、反码、补码都是一样的(三码合一)
  3. 负数的反码 = 它的原码符号位不变,其他位取反(0->1, 1->0)
  4. 负数的补码 = 它的反码 + 1, 负数的反码 = 负数的补码 - 1
  5. 0的反码补码都是0
  6. Java没有无符号数,换言之,Java中的数都是有符号的
  7. 在计算机运行时,都是以补码的方式来运算的
  8. 当我们看的运算结果的时候,要看他的原码

位运算

  1. Java中有7个位运算(&、|、^、~、>>、<<、>>>)
  2. 按位与(&):两个全为1则为1,否则为0
  3. 按位或(|):两位有一个为1,结果为1,否则为0
  4. 按位异或(^):两位一个为1,一个为0,结果为1,否则为0
  5. 按位取反(~):0 ->1、1 -> 0

例如:

按位与(&)2&3=2

image-1670165341662

按位取反(-2 = 1

  1. 先得到-2的原码 1010
  2. -2再取反 1101
  3. -2补码(反码+1) 1110
  4. ~-2运算 0001(补码)
  5. 补码取原码 符号位为0 则不变结果为1

按位取反(2 = -3

  1. 先得到2的原码 0010
  2. 2补码 0010
  3. ~2运算 1101(补码)
  4. 则不变结果为1,为负数,则补码 -1 再取反
  5. 1101 -> 1100(反码) -> 1011结果为 -3

位运算符

  1. 算数右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
  2. 算数左移 <<:符号位不变,低位补0
  3. 逻辑右移也叫无符号右移,运算规则 低位溢出 高位补0

例如

1>>2 = 0

  1. 1的二进制为 0001
  2. 向右移动两位为 0000 等价于 1/2/2 =0 类似于十进制移动小数点)

1 << 2 = 4

  1. 1的二进制为 0001
  2. 向左移动两位为 0100 等价于 1 * 2 * 2 =4
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区