Java重修笔记 第六天 原码反码和补码、位运算符

  • 对于原码反码和补码的解释

1. 二进制最高位是符号位,0代表正数,1代表负数,Java中的数都是有符号的

2. 正数的原码反码和补码都一样(三码合一)

3. 负数的反码 = 符号位不变其他位取反

4. 负数的补码 = 反码 + 1 = 原码符号位不变其他位取反 + 1

5. 负数的原码 = (补码 - 1)后,符号位不变其他位取反

6. 计算机在运算的时候,都是以该数的补码的形式来运算

7. 在显示运算结果的时候,会把算好的补码再转换回原码的形式显示出来

  • 按位运算符(& 、| 、^ 、~ )

        按位与 & :        全为 1 ,结果是 1 

        按位或 | :         只要有一个是 1 ,结果就是 1

        按位异或 ^ :     只要不一样就是 1

        按位取反 ~ :    1 取反为 0 ,0 取反为 1 

ab按位与 &按位或 |按位异或 ^按位取反 ~
111101 ---> 0
0 ---> 1
10011
01011
00000

举例:

2 & 3 = 0b0010 & 0b0011 (原码表示)

         = 0b0010 & 0b0011 (转换为补码)

         = 0b0010 (算出补码结果)

         = 0b0010 (转回原码)

         = 2 (输出结果)

~-2 = ~0b10000000 00000000 00000000 00000010 (原码表示)

      = ~0b11111111 11111111 11111111 11111110 (转换为补码)

      = 0b00000000 00000000 00000000 00000001 (算出补码结果)

      = 0b00000000 00000000 00000000 00000001 (转回原码)

      = 1 (输出结果)

~2 = ~0b00000000 00000000 00000000 00000010 (原码表示)

     = ~0b00000000 00000000 00000000 00000010 (转换为补码)

     = 0b11111111 11111111 11111111 11111101 (算出补码结果)

     = 0b10000000 00000000 00000000 00000011 (转回原码)

     = -3 (输出结果)

2 | 3 = 0b00000000 00000000 00000000 00000010 | 
           0b00000000 00000000 00000000 00000011 (原码表示)

        = 0b00000000 00000000 00000000 00000010 | 
           0b00000000 00000000 00000000 00000011 (转换为补码)

        = 0b00000000 00000000 00000000 00000011 (算出补码结果)

        = 0b00000000 00000000 00000000 00000011 (转回原码)

        = 3 (输出结果)

2 ^ 3 = 0b00000000 00000000 00000000 00000010 ^ 
            0b00000000 00000000 00000000 00000011 (原码表示)

        = 0b00000000 00000000 00000000 00000010 ^ 
           0b00000000 00000000 00000000 00000011 (转换为补码)

        = 0b00000000 00000000 00000000 00000001 (算出补码结果)

        = 0b00000000 00000000 00000000 00000001 (转回原码)

        = 1 (输出结果)

  • 算术逻辑运算符(<< 、>> 、>>> )

        算术左移 << :符号位不变,高位溢出,低位补0,算术左移几位,就乘以2的几次方

        算术右移 >> :符号位不变,高位补符号位的数,低位溢出,算术右移几位,就除以2的几次方

        逻辑右移(无符号右移) >>> :符号位不变,高位补0,低位溢出

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值