位运算

注意:

1.要做位运算,首先得把数字转化为二进制并且是补码。

2.&,|当两边都是数字时,为位运算符;当两边为布尔值时,为逻辑运算符。

位运算符包括:&,|,^,~,<<,>>,>>>.

与位运算符

//&运算符,有0则0

//3  00000000 00000000 00000000 00000011

//4  00000000 00000000 00000000 00000100

//  00000000 00000000 00000000 00000000

System.out.println(3&4);//结果为0

或位运算符

//|运算符,有1则1

//3  00000000 00000000 00000000 00000011

//4  00000000 00000000 00000000 00000100

//  00000000 00000000 00000000 00000111

System.out.println(3|4);//结果为7

异或运算符

//^运算符,有相同则0,异同则1.

//3  00000000 00000000 00000000 00000011

//4  00000000 00000000 00000000 00000100

//  00000000 00000000 00000000 00000111

System.out.println(3^4);//结果为7

//注意:一个数对另一个数异或两次,该数本身不变。a^b^b = a。

按位取反运算符

//|运算符,有1则1

//3    00000000 00000000 00000000 00000011

//      11111111 11111111 11111111 11111100

//补码  11111111 11111111 11111111 11111100

//反码  11111111 11111111 11111111 11111011

//源码  10000000 00000000 00000000 00000100  -4

System.out.println(~3);//结果为7

左移<<

//<<左移 左边最高位丢弃,右边补齐0

//3    00000000 00000000 00000000 00000011

//(00)000000 00000000 00000000 0000001100

//<<把<<左边的数据*2的移动次幂

System.out.println(2<<2);//结果为8

右移>>

//<<右移 左边最高位是0补齐0,左边最高位是1补齐1

//4    00000000 00000000 00000000 0000100

//       00000000 00000000 00000000 000000100

//<<把<<左边的数据*2的移动次幂

System.out.println(4>>2);//结果为1


无符号移动>>>,无论左边是0还是1,左边都补0

练习:

请用最有效的方式计算出2*8?

2<<3 = 16

乘法的底层就是用为运算进行计算的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文为 Crocutax 原创,转载请注明出处 http://www.crocutax.com 撸代码时间越长,越...
    Crocutax阅读 363评论 0 0
  • 二进制转十进制 0011 10012^(6-1) + 2^(5-1) + 2^(4-1) + 2^(1-1) = ...
    u14e阅读 1,307评论 0 1
  • C#位运算讲解与示例首先每一个权限数都是2的N次方数如:k1=2 ; //添加k2=4 ; //删除k3=8; /...
    好怕怕阅读 3,112评论 0 2
  • 乌云密布,看着天上一层层的乌云,总感觉大雨就要下下来了。。。。。。 与你分享我头顶的那片乌云 在回家的路上,我在轻...
    姑苏伴歌阅读 199评论 0 1
  • 今早见到儿是在餐厅,儿仍是守护着队旗,带着队友,排着整齐的队伍出现在我的眼前。我没有和他打招呼,只是在一旁...
    大爱无疆杨青阅读 235评论 0 3