【Java】位操作符

java支持的位运算符有7个,分为两类:位逻辑运算和移位运算。位逻辑运算符包括按位取反(~)、按位与(&)、按位或(|)和按位异或(^)4种,。移位运算符包括左移(<<)、右移(>>)和无符号右移(>>>)3种。位运算符只能用于整型数据,包括byte、short、int、long和char类型。下表列出了各种位运算符的功能与示例。假设a = 10, b = 3。

~运算符是对运算数的每一位按位取反。

下表列出了位运算符的基本运算,假设整数变量A的值为60和变量B的值为13:

操作符 描述 例子
&   如果相对应位都是1,则结果为1,否则为0   A & B得到12,即0000 1100  
|   如果相对应位都是0,则结果为0,否则为1   A | B得到61,即 0011 1101  
^   如果相对应位值相同,则结果为0,否则为1   A ^ B得到49,即 0011 0001  
~   按位取反运算符翻转操作数的每一位,即0变成1,1变成0。   ~A得到-61,即1100 0011  
<<   按位左移运算符。左操作数按位左移右操作数指定的位数。
(低位补零)
  A << 2得到240,即 1111 0000  
>>   “有符号”按位右移运算符。左操作数按位右移右操作数指定的位数。
该操作符使用 “符号扩展”:若符号为正,则高位插入 0;若符号为负,则高位插入 1。
  A >> 2得到15即 1111  
>>>   “无符号”按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。
该操作符使用 “零扩展”,无论正负,都在高位插入 0。
  A>>>2得到15即0000 1111  
按位操作符

按位操作符用来操作整数的二进制位,会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。

与操作符 “&”,如果两个输入位都是 1,那么输出位是 1,否则输入位是 0;
或操作符 “|” ,如果两个输入位有一个是 1,那么输出位是 1,只有两个输入位都是 0,输出位才是 0;
异或运算符 “^”,如果两个输入位都为 1 或者都为 0,那么输出位是 0,否则输出位是 1。
非运算符 “~”,这个一元操作符,只能对一个数操作,规则是输出位与输入位相反。

//转化为二进制:0101 int num1 = 5; //转化为二进制:1001 int num2 = 9; //与运算,二进制结果为 0001,打印结果为 1 System.out.println(num1 & num2); //或运算,二进制结果为 1101,打印结果为 13 System.out.println(num1 | num2); //异或运算,二进制结果为 1100,打印结果为 12 System.out.println(num1 ^ num2); //非运算,二进制结果为 11111111111111111111111111111010,打印结果 -6 System.out.println(Integer.toBinaryString(~num1));

好吧,进哥承认,我看到那个 -6 也蒙了那么一下,所以整理了以下内容。

补充

数字的二进制表现形式为 “有符号的二进制补码”。
原码:数字的二进制表示法,最高位为符号位, “ 0 ” 为正,“ 1 ” 为负。
反码:正数的反码与原码相同,负数的反码对原码逐位取反,符号位除外。
补码:正数的补码与原码相同,负数的补码在其反码末位加 1。
负数的二进制算法(以 -6 为例):
1)将 -6 的绝对值转化为二进制,即:00000000 00000000 00000000 00000110
2)求该二进制数的反码,即:11111111 11111111 11111111 11111001
3)对以上求得的二进制数加 1,即:11111111 11111111 11111111 11111010

移位操作符

移位操作符的运算对象也是二进制的 “位”,但是只能用来处理整数类型。

左移位操作符 “<<” 按照操作符右侧指定的位数将操作符左边的操作数向左移动(低位补零);

“有符号”右移位操作符 “>>” 按照操作符右侧指定的位数将操作符左边的操作数向右移动。该操作符使用 “符号扩展”:若符号为正,则高位插入 0;若符号为负,则高位插入 1。

“无符号”右移位操作符 “>>>”,该操作符使用 “零扩展”,无论正负,都在高位插入 0。

//二进制 1111; int i = 15; //向右边移动两位,二进制结果为 0011,打印结果为 3 System.out.println(i >> 2); //向左边移动两位,二进制结果为 111100,打印结果为 60 System.out.println(i << 2);

移位操作符可以与等号组合使用(<<= 或 >>= 或 >>>=),表示操作符左边的值会移动由右边数值指定的位数,再将得到的结果赋给左边的变量。

Java运算符

Java运算符按功能可分为:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。

算数运算符

算术运算符包括通常的加(+)、减(-)、乘(*)、除(/)、取模(%),完成整数型和浮点型数据的算术运算。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpydxj.html