java基础------运算符总结

一. 与(&)运算: 同为1才为1

5 二进制 101
3 二进制 011
    结果 001

二. 或(|)运算:有一个为1,则为1

5 二进制 101
3 二进制 011
    结果 111

三.异或(^)运算:不相同则为1

5 二进制 101
3 二进制 011
    结果 110

四. 左移(<<)运算 : 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

3 << 2为例:

 //3的2进制数
 0000 0000 0000 0000 0000 0000 0000 0011

 //3<<2 把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零
 0000 0000 0000 0000 0000 0000 0000 1100

首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.

    数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。所以3 << 2 ,其实相当于 3* 2^2 = 12

五. 右移(>>)运算 : 按二进制形式把所有的数字向右移动对应移动位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1

以11 >> 2为例 : 

 //11的32位二进制形式
 0000 0000 0000 0000 0000 0000 0000 1011

 //11 >> 2,把低位的最后两个数字移出,因为该数字是正数,所以在高位补零
 0000 0000 0000 0000 0000 0000 0000 0010

   计算过程:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是2.

  数学意义:右移一位相当于除2,右移n位相当于除以2的n次方,正数舍,负数进  , 11>>2相当于 : 11 /2^2 = 11/4 = 2

补充: 负数的右移 -31>>3

1111 1111 1111 1111 1111 1111 1110 0001(-31)右移3位 ,把低位的最后三个数字移出(变成1110 0),因为该数字是负数,所以在高位补1(补三个1),

 结果是111 1111 1111 1111 1111 1111 1111 1110 0(-4)。

对于负数的三十二位(int)二进制补充说明 : 二进制数分为有符号数和无符号数,有符号数里面才有正负之分。其中第一位为符号位,1代表负数,0代表正数。例如 4就是0000 0000 0000 0000 0000 0000 0000 0100,-4就是1111 1111 1111 1111 1111 1111 1111 1100 (从左边最后一个1开始算)

六 . 无符号右移(>>>)运算 : 按二进制形式把所有的数字向右移动对应移动位数,低位移出(舍弃),高位的空位补零,对于正数来说和带符号右移相同,对于负数来说不同。

如:15>>>2的结果是3,-31>>>3的结果是536870908,移出的部分将被抛弃:

     同样转为二进制的形式,00000000 00000000 00000000 00001111(15)右移2位的结果是00000000 00000000 00000000 00000011(3),

 1111 1111 1111 1111 1111 1111 1110 0001(-31的32位2进制数)右移3位的结果是000 1111 1111 1111 1111 1111 1111 1110 0(536870908)。
 

 

 

java基础------运算符总结java基础------运算符总结 weixin_42232931 发布了32 篇原创文章 · 获赞 2 · 访问量 1288 私信 关注
上一篇:一本通题库1111


下一篇:【栈】1111. 有效括号的嵌套深度