码迷,mamicode.com
首页 > 编程语言 > 详细

java个人学习笔记:位运算符

时间:2015-05-31 10:49:17      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

位运算是直接对二进制进行运算的。

<<  左移 3<<2 –> 3*2*2 像左移动两位。实则*2*2

3:        0000 0011

左移两位  0000 1100

>> 右移 3>>2 –> 3/2/2 实则/2/2

3:          0000 0011

右移两位   0000 0000

有符号的右移时候,最高位是0的用0补,最高位是1的用1补。

-3 >> 2

-3         1000 0000 0000 0000 0000 0000 0000 0011 原码 1111 1111 1111 1111 1111 1111 1111 1100反码 1111 1111 1111 1111 1111 1111 1111 1101 补码

右移两位  11 1111 1111 1111 1111 1111 1111 1111  11 (01丢失)补码 1111 1111 1111 1111 1111 1111 1111 1111  1110 反码 1000 0000 0000 0000 0000 0000 0000 0001 结果为-1

 

>>> 无符号的右移运算

-3 >>> 2

-3         1000 0000 0000 0000 0000 0000 0000 0011 原码 1111 1111 1111 1111 1111 1111 1111 1100 反码 1111 1111 1111 1111 1111 1111 1111 1101 补码

右移两位  00  1111 1111 1111 1111 1111 1111 1111  11 (01丢失)结果为1073741823

注意在java中 整数默认用int存储 所以是4字节。

 

&与运算          二进制码的与运算

|或运算、        二进制码的或运算

^异或运算       二进制码的异或运算

~反码           

 

12&5

12的原码(高位为0不写)

12   0000 1100

5     0000 0101

&     0000 0100

结果  4

 

12|5

12   0000 1100

5     0000 0101

|     0000 1101

结果 13

 

12^5

12   0000 1100

5     0000 0101

^    0000 1001

结果 9

 

~12

12   0000 0000 0000 0000 0000 0000 0000 1100

~    1111 1111 1111 1111 1111 1111 1111 0011 (符号位改变 负数补码)

      1111 1111 1111 1111 1111 1111 1111 0010 (反码)

      1000 0000 0000 0000 0000 0000 0000 1101 (原码)

结果:-13

 

int m =5;

int n = 3

m = m^n;

n = m^n;

m = m^n;

 

m = m^n

n = m ^ n = (m ^ n) ^n = m =5

m = m ^n = (m ^ n) ^n = n = 3

5    0000 0101  

3    0000 0011

^   0000 0110         6

3    0000 0011

^   0000 0101         5

java个人学习笔记:位运算符

标签:

原文地址:http://www.cnblogs.com/cyfly/p/4541546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!