《Thinking in Java》位运算
按位操作符: 首先先记住一件事,方便理解:是否对应正负对应10. 1.与(&):11得1,10得0,00得0. 2.或(|):11得1,10得1,00得0. 3.异或(^):11得0,10得1,00得0(相同为0,不同为1). 4.非(~):这是一元运算符,上面3个是2元运算符,0得1,1得0(取反)。 移位操作符: 记住:移位操作符左边的是整数类型(int)的被操作数,右边是要移动的位数。 1.左位移操作符(<<):能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0,低位是右边,高位是左边) 2.“有符号”右移位操作符(>>):按照操作符右侧指定的位数将操作符左边的操作数向右移动(“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位插入0;若符号位负,则在高位插入1)。 3.“无符号”右移位操作符(>>>):它使用“零扩展”:无论正负,都在高位插入0. 4.左移操作符只有那么一种,不和右移位操作符一样。 负数位运算:
一个正整数的位运算就是按二进制转为32位的源码,高位的0不显示(Integer.toBinaryString(数字)) 以下代码以-6为例子,Integer.toBinaryString(-6)输出之后是(22222111? 22222111? 22222111? 22222010) Integer.toBinaryString(6) = 110; 1.转为源码:负数最高位为1,其他按其绝对值取(10000000? 00000000? 00000000? 00000110) 2.反码:最高位不变,其他位取反(22222111? 22222111? 22222111? 22222001). 3.补码:给反码进行+1操作(22222111? 22222111? 22222111? 22222010)说明:最后的001代表的是1,1+1=2,所以最后三位应该是为2,2转为二进制是010 重新转为10进制,只需按相反操作就行了: 1.补码-1变反码 2.反码:最高位不变,其他位取反变成源码 3:源码按二进制转十进制计算 即使是对负数进行位移操作,也只是在补码变反码之间加一个步骤,将补码位移变成新补码,再用新补码-1变反码 负数位运算资料来源:https://blog.csdn.net/weixin_37322501/article/details/85759105 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java中char类型和int类型相加结果是char类型还是int类型?
- java – 为什么是myString.equals(“aString”);不同于“aS
- Java:JOptionPane Radio Buttons
- 如何从Java执行Python脚本?
- java.lang.IllegalStateException: Failed to load Applica
- 如何从java中的链表中删除对象?
- java – Hibernate – 本机SQL非托管实体集合
- Java进阶(1) - Object类
- java – 查找元素或检查它是否存在于数组/列表中?
- java – Netbeans&Maven:不同的编译行为