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。
非运算符 “~”,这个一元操作符,只能对一个数操作,规则是输出位与输入位相反。
好吧,进哥承认,我看到那个 -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运算符按功能可分为:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。
算数运算符算术运算符包括通常的加(+)、减(-)、乘(*)、除(/)、取模(%),完成整数型和浮点型数据的算术运算。