黑马程序员技术交流社区
标题:
【石家庄校区】计算机中的位运算
[打印本页]
作者:
Ljp
时间:
2018-2-1 14:33
标题:
【石家庄校区】计算机中的位运算
本帖最后由 小石姐姐 于 2018-2-1 15:32 编辑
计算机中的"位运算": //计算机中的"位运算"指的就是针对"二进制"运算,也就是说"位运算"操作的都是二进制数据.
&运算:
7 & 0:
//计算
0000 0111 //7
&
0000 0000 //0
--
0000 0000 --> 0
7 & 8:
//计算
0000 0111 //7
&
0000 1000 //8
--
0000 0000 --> 0
|运算:
7 | 0:
//计算
0000 0111 //7
|
0000 0000 //0
--
0000 0111 --> 7
7 | 8:
//计算
0000 0111 //7
|
0000 1000 //8
--
0000 1111 --> 15
>>运算:右移运算
12 >> 1 == 6
12 >> 2 == 3
12 >> 3 == 1
// 所谓的右移,指的就是除以2的几次方. 比如: 12 >> 2,就是12除以2的2次方,就是12除以4,取整,结果是3
// 右移,超出部分砍掉,前边不够,就补齐,
// 补得时候,如果前边是0,就补0,如果前边是1,就补1
分析:
12 >> 2 == 3
//计算
0000 1100 //12
>> 2
00 001100 --> 砍掉最后两个,前边补齐, --> 0000 0011 --> 3
<<运算:左移运算
3 << 1 == 6
3 << 2 == 12
3 << 3 == 24
// 所谓的左移,指的就是乘以2的几次方. 比如: 3 << 2,就是3乘以2的2次方,就是3乘以4,12
// 左移,超出部分砍掉,后边不够直接补0
分析:
12 << 2 == 3
//计算
0000 1100 //12
<< 2
000011 00 --> 砍掉前边两个,后边补齐, --> 0011 0000 --> 48
>>>运算:无符号右移运算
12 >>> 1 == 6
12 >>> 2 == 3
12 >>> 3 == 1
// 所谓的右移,指的就是除以2的几次方. 比如: 12 >> 2,就是12除以2的2次方,就是12除以4,取整,结果是3
// 右移,超出部分砍掉,前边不够,就补齐,补0
分析:
-2 >> 2 == -1
//计算
1000 0000 0000 0000 0000 0000 0000 0010 //int类型的-2源码
1111 1111 1111 1111 1111 1111 1111 1101 //int类型的-2反码
1111 1111 1111 1111 1111 1111 1111 1110 //int类型的-2补码
>> 2
1111 1111 1111 1111 1111 1111 1111 1111 //补码
1111 1111 1111 1111 1111 1111 1111 1110 //反码=补码-1
1000 0000 0000 0000 0000 0000 0000 0001 //源码 --> -1
-2 >>> 2 == 1073741823
//计算
1000 0000 0000 0000 0000 0000 0000 0010 //int类型的-2源码
1111 1111 1111 1111 1111 1111 1111 1101 //int类型的-2反码
1111 1111 1111 1111 1111 1111 1111 1110 //int类型的-2补码
>>> 2
0011 1111 1111 1111 1111 1111 1111 1111 //补码,反码,源码 --> 1073741823
//11ad2ed495714cc2b6588ae9973cd6d8_day17.java
1101 0000 1001 0111 1010 1100 1001 0101 --> //-1352117397
1010 1111 0110 1000 0101 0011 0110 1010 --> //-1352117397 反码
1010 1111 0110 1000 0101 0011 0110 1011 --> //-1352117397 补码
&
0000 0000 0000 0000 0000 0000 0000 1111 // 0xf
--
0000 0000 0000 0000 0000 0000 0000 1011 -- 11
-->
1010 1111 0110 1000 0101 0011 0110 1011 --> //-1352117397 补码
>>> 4
0000 1010 1111 0110 1000 0101 0011 0110
&
0000 0000 0000 0000 0000 0000 0000 1111 // 0xf
--
0000 0000 0000 0000 0000 0000 0000 0110 //6
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2