黑马程序员技术交流社区
标题:
java位运算
[打印本页]
作者:
宋耀冬
时间:
2013-3-16 13:20
标题:
java位运算
对java的位运算理解不够透彻 求一篇详细的文档
能有几篇代码举例最好了
作者:
姓名长度不符
时间:
2013-3-16 13:22
其实lz要是有单片机的基础的话,理解那个位运算其实很容易的- -
作者:
黑马-郑玉元
时间:
2013-3-16 13:23
位运算符 简单说就是操作二进制的,所以运算的时候,都要转换成二进制进行运算!
非0为真 0代表的是false 1代表的是true
& 如果有一个为0,结果为0
| 如果有一个为1,结果为1
^ 相同为0 不同的为1
<< 左移 相当于乘2操作,左边舍弃,右边用0补
>> 右移 相当于除以2操作 右边舍弃,左边高位是几就用几补
>>> 无符号右移 相当于除以2操作 右边舍弃,左边高位永远用0补
作者:
郝勇
时间:
2013-3-16 14:44
其实你可以看看毕老师的视频java编程基础里的第二天 讲解很详细 我这里有自己总结的供自己复习的笔记 你可以参考一下
&13位运算符
左移 右移(其中位表示二进制的位,是用来进行二进制运算的一种运算符号)
<< 左移 3<<2=12-->3*2*2=12 相当于乘与2的倍数 其实就是乘以2的移动的位数的次幂
3<<2=12;
0000-0000 0000-0000 0000-0000 0000-0011
0000-0000 0000-0000 0000-0000 0000-001100 补零
>> 右移 3>>1=1-->3/2=1 相当与除以2的倍数 其实就是除以2的移动位数次幂
移n位,就是对乘以或者除以2的n次幂
用处:做运算时,最快的运算是位运算
6>>2=1
0000-0000 0000-0000 0000-0000 0000-0110
000000-0000 0000-0000 0000-0000 0000-0110 最后两位不要
规律:一个数往左移,越移越大;往右移,越移越小(个位有效位最后会移光)
>>> 无符号右移 3>>>1=1-->3/2=1
>>:最高位补什么由原有数据的最高位值而定;
如果最高位0,右移后,用0补空位
如果最高位1,右移后,用1补空位
>>>:无论最高位是什么,右移后,都用0补
&14位运算符(与-或-异或)
0视为假,1视为真
& 与运算 6&3=2
110 真真假
&011 假真真
————
010 假真假
| 或运算 6|3=7
110
|011
————
111
^ 异或运算 6^3=5
110
^ 011
————
101
~ 反码 ~6=-7
000....000110 6的二进制表现
~111....111001 6的取反 十进制表示为-7
-000....000001 -7减1
=111....111000 得数取反
~000....000111 就是整数7,加上负号就是第二行的-7
位运算符的细节
<< 空位补0,被移除的高位丢弃,空缺位补0
>> 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1
>>> 被移位二进制最高位无论是0或者是1,空缺位都用0补
& 二进制位进行&运算,只有1&1时结果是1,否则是0
| 二进制位进行|运算,只有0|0时结果是0,否则是1
^ 任何相同二进制进行^运算,结果是0;1^1=0;0^0=0
不相同二进制位^运算结果是1;1^0=1;0^1=1
一个数异或同一个数两次,结果还是那个数(用处:加密算法)
技巧 二进制1就是true;0就是false
这些都是视频里的东西,楼主可以仔细把视频看好,看的过程中一定要做笔记,否则回过头来 有些知识点忘记,或者复习将是一个大麻烦!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2