首页 > 编程知识 正文

算术左移符号位改变,位运算左移右移举例

时间:2023-05-04 07:31:39 阅读:264612 作者:2676

在Java中,所有数据的表示方法都是以补码的形式表示,如果没有特殊说明,Java中的数据类型默认是int,int数据类型的长度是8位,一位是四个字节,就是32字节,32bit.

一:与运算符(&)

运算规则:

0&0=0;0&1=0;1&0=0;1&1=1

即:两个同时为1,结果为1,否则为0

例如:5&7

十进制5转为二进制的5:0000 0101

十进制7转为二进制的7:0000 0111

结果:0000 0101 ->转为十进制:5

即:5&7 = 5

二:或运算(|)

运算规则:

0|0=0; 0|1=1; 1|0=1; 1|1=1;

即 :参加运算的两个对象,一个为1,其值为1。

例如:5|7 即 0000 0101 | 0000 0111 = 0000 0111,因此,5|7=7。

三:异或运算符(^)

运算规则可以简单理解为相加后不进位

运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

即:参加运算的两个对象,如果两个位为“异”(值不同),则该位结果为1,否则为0。

例如:5^7 = 0000 0101 ^ 0000 0111 =0000 0010,因此,5^7 = 7

性质:

1.N^0=N

2.N^N=0

3.同一批数,通过交换律结合律,最后异或出来是同一个数

四:左移(<<)

运算规则:二进制位向左移动相应位数,高处越位丢弃,低位补0;

如:5<<2,5=00000101,5<<2=00010100=20,即5 * 2ⁿ

公式:m<<n=m* 2ⁿ

五:右移(>>)

运算规则:二进制位向右移动相应位数,低位丢弃,高位补0;

如:5>>2,5=00000101,5>>2=00000001=1,即5/(2ⁿ)向左取整
公式:m>>n=m/2ⁿ

>>>:无符号右移(注意:没有无符号左移)

无符号右移(注意:没有无符号左移)

正数做>>>运算的时候和>>是一样的。区别在于负数运算

六:非运算符(~)

运算规则:如果位为0,结果是1,如果位为1,结果是0.

在Java中,所有数据的表示方法都是以补码的形式表示

如:~37

8转为二进制是100101.

补码后为: 00000000 00000000 00000000 00100101

取反为: 11111111 11111111 11111111 11011010

因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。

因此,我们可将这个二进制数的补码进行还原: 首先,末尾减1得反码:11111111 11111111 11111111 11011001 其次,将各位取反得原码:

00000000 00000000 00000000 00100110,此时二进制转原码为38

所以~37 = -38.

进制转换工具

加运算的两个对象,按二进制位进行运算。

进制转换地址:http://tool.oschina.net/hexconvert/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。