Java 按位操作符 移位操作符

在了解Java 按位操作符 移位操作符之前,我们我先了解整数基本类型的 “机器数”、“真值”、“原码”、“反码”、“补码”

1.机器数

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。
如果是 -3 ,就是 10000011 。那么,这里的 00000011 和 10000011 就是机器数。

2.真值

由于机器数的第一位是符号位,所以机器数的形式值就不等于真正的数值。即最高位是不参与运算的。真值就是它实际的值

例如,上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。
所以为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

3.原码

就是当前数字的二进制表现形式

正数的原码就是它的本身,如:1 的原码是 1000 0001
负数用最高位是1表示负数 ,如:-1的原码是 1000 0001
注:原码的第一位(最高位)表示数值的符号

4.反码

  1. 正数的反码跟原码一样
  2. 负数的反码是负数的原码按位取反(0变1,1变0),符号位不变
1 的原码是 0000 0001
-1的反码是 1111 1110

5.补码(整数的补码是在计算机中的存储形式)

  1. 正数的补码和原码一样
  2. 负数的补码是负数的反码加1
    1)取反时,符号位不参与取反。
    2)加1时,符号位参与加1。
    3)特殊补码,即首位为1,其它位全是0。对于这种形式的补码,不要去求它的原码了,求出来也不对,它就表示该类型中的最小负数,比如10000000表示byte类型中的最小负数-128。

1 的原码是 0000 0001
-1的补码是 1111 1111(在计算机中存储形式)

java按位运算符(操作符)

按位运算符是来操作整数基本数据类型中的单个“比特”(bit),即二进制位,位运算符会对两个参数中对 应的位执行布尔代数运算,并最终生成一个结果。

“与”、“位与”(&)

按位“与”操作符,如果两个数的二进制,相同位数都是1,则该位结果是1,否则是0.

“或”、“位或”(|)

按位“或”操作符,如果两个数的二进制,相同位数只要有一个是1,则该位结果是1,否则是0

“异或、“位异或”(^)

按位“异或”操作符,如果两个数的二进制,相同位数有且只有一个是1,则该位结果是1,否则是0(两个数都是1,位结果为0;两个数都是0,位结果也是0)

“非”、“位非”(~)也称为取反操作符

按位“非”操作符,属于一元操作符,只对一个操作数进行操作,(其他按位操作符是二元操作符)。按位“非”生成与输入位相反的值,——若输入0,则输出1,若输入1,则输出0.

移位操作符

移位操作符操作的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型(基本类型的一种)

左移位操作符 (<<)

按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)

“有符号”右移位操作符(>>)

按照操作符右侧指定的位数将操作符左边的操作数向右移。“有符号”右移位操作符使用“符号扩展”;若符号位正,则在高位插入0;若符号位负。则在高位插入1。

“无符号”右移位操作符(>>>)

按照操作符右侧指定的位数将操作符左边的操作数向右移,无论正负,都在高位插入0。这一操作符是C或C++中所没有的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值