Java中运用位运算符的屏蔽技术求得整数的各个位
2017-08-14 20:55
218 查看
位运算符
3.5.3 位运算符在处理整型数值时,可以直接对组成整型数值的各个位进行操作.这意味着可以使用屏蔽技术获得整数中的各个位.位运算符包括:
&(“与”),|(“或”),^(“异或”),~(“非”)
这些运算符在位模式下工作.例如,如果n是一个整型变量,并且用二进制表示的n从右数第4位为1,那么:
int fourthBitFromRight = (n & 0b1000) / 0b1000;
返回1,否则返回0.通过运用2的幂次方的&运算可以将其他位屏蔽掉,而只保留其中的某一位.
另外,”>>”和”<<”运算符将二进制位进行右移或左移操作.当需要建立位模式屏蔽某些位时,使用这两个运算符十分方便:
int fourthBitFromRight = (n & (1 << 3)) >> 3;
最后,>>>运算符将用0填充高位,<<运算符用符号位填充高位.没有<<<运算符.
注释:在C/C++中无法确定>>操作执行的是算术移位(扩展符号位),还是逻辑移位(高位添0).在执行中将会选择效率较高的一种.这就是说,在C/C++中,>>运算符实际上只是为非负数定义的.Java消除了这种含糊性.
上述是摘自《Java核心技术卷1》;0b1000是二进制数8,0b代表二进制数
以下是我的理解
———————————————————————————————————————————————————-
整型数据在内存中以二进制的形式表示,如一个int型变量在内存中占4个字节共32位,int型数据7的二进制表示是
00000000 _ 00000000 _ 00000000 _ 00000111
左面最高位是符号位,最高位0表示正数,是1表示负数。负数采用补码表示,如-8的补码表示是:
11111111 _ 11111111 _ 11111111 _ 11111000
这样就可以对两个整型数据实施位运算,即对两个整型数据对应的位进行运算得到一个新的整型数据。
1、“按位与”运算
“按位与”运算符“&”是双目运算符,对两个整型数据a,b按位进行运算,运算结果是一个整型数据c。运算法则是如果a,b两个数据对应位都是1,则c的该位是1,否则是0。如果b的精度高于a,那么结果c的精度和b相同。
例如:
***a:00000000 _ 00000000 _ 00000000 _ 00000111
& b:10000001_ 10100101 _ 11110011 _ 10101011
————————————————————————
***c:00000000_00000000 _ 00000000 _ 00000011
接下来就解释 :int fourthBitFromRight = (n & 0b1000) / 0b1000; 是什么意思。
二进制数:0b1000,只有第四位是1,其他位是0,所以(n & 0b1000)的结果是除了第四位之外都是0,当n的第四位是1的时候,(n & 0b1000)的第四位是1,假设第四位是1,其结果为:
(n & 0b1000):00000000 _ 00000000 _ 00000000 _ 00001000
所以int fourthBitFromRight = (n & 0b1000) / 0b1000=1;
2、“按位或”运算
“按位或”运算符“|”是二目运算符,对两个整型数据a,b按位进行运算,运算结果是一个整型数据c。运算法则是如果a,b两个数据对应都是0,则c的该位是0,否则是1。如果b的精度高于a,那么结果c的精度和b相同。
3、“按位非”运算
“按位非”运算符“~”是单目运算符,对于一个整型数据a按位进行运算,运算结果是一个整型数据c。运算法则是如果a对应位是0,则c的该位是1,否则是0。
4、“按位异或”运算
“按位异或”运算符“^”是二目运算符,对两个整型数据a,b按位进行运算,运算结果是一个整型数据c。运算法则是如果a,b两个数据对应位相同,则c的该位是0,否则是1。如果b的精度高于a,那么结果c的精度和b相同。
相关文章推荐
- 运用加密技术保护Java源代码(转)
- 运用加密技术保护Java源代码
- 深入了解Java爬虫的运用技术
- 运用加密技术保护Java源代码
- 运用加密技术保护Java源代码
- 小博老师解析Java核心技术 ——动态解析Jar的运用
- 运用加密技术保护Java源代码
- 运用加密技术保护Java源代码
- 小博老师解析Java核心技术 ——动态解析Jar的运用
- 运用加密技术保护Java源代码
- Java运用JNI调用dll实现屏蔽系统热键
- Java屏蔽技术
- 运用加密技术保护Java源代码
- JAVA技术支持课--第六次java语言技术支持--任务2--用冒泡排序法和朴素排序法,从大到小排列整数
- java运用jni调用dll(含源码)实现屏蔽系统热键和任务栏
- 博为峰Java技术文章 ——JavaSE Swing 按钮组件的综合运用
- 运用加密技术保护Java源代码 (转)
- Java运用JNI调用dll实现屏蔽系统热键
- java 核心技术 第三章栗子 数组运用
- 运用加密技术保护Java源代码(转)