Bitwise Logical Operators(位运算符)由于在一般的日常开发当中很少涉及,所以在《Thinking in java》,《Core Java 2》等Java书籍中只是略有提及,一笔带过。
也没找到一本参考书对其有详细描述,兴趣所致,在网上搜索了许多资料。终于大致了解了其原理。
位运算符包括:~,|,&,^
~ the NOT Operator (非运算符)
| the OR Operator (或运算符)
& the AND Operator (与运算符)
^ the XOR Operator (异或运算符)
~ the NOT Operator(非运算符)
以下是《Thinking in java》中的描述:
The bitwise NOT (~, also called the ones complement operator) is a unary operator; it takes only one argument. (All other bitwise operators are binary operators.)
非运算符是一个一元运算符,它只需要一个参数。(其它的位运算符都是二元运算符)
Bitwise NOT produces the opposite of the input bit—a one if the input bit is zero, a zero if the input bit is one.
非运算符会对输入(input)进行位取反运算,0变成1,1变成0。(假设输入(input)是一个十进制数,则先取其二进制表示,再进行位取反运算)
示例1
class TheNotOperator {
public static void main(String args[]) {
// invert 0
System.out.println("~ 0 = " + ~0);
// invert 11
System.out.println("~ 11 = " + ~11);
}
}
为何 ~0 = -1?
0用二进制表示为:00000000000000000000000000000000(更多关于二进制与十进制相互转换的信息,见
http://denverj.iteye.com/blog/736637)
取反就是: 11111111111111111111111111111111
可以看出这是一个负数,因为在二进制中,最左位为1表示负数。要找出它的实际值,我们采用二进制补码算法。(更多二进制补码的信息,见
http://denverj.iteye.com/blog/736583)
第一步,每一个二进制位都取相反值,0变成1,1变成0。比如,11111111111111111111111111111111的相反值就是00000000000000000000000000000000。
第二步,将上一步得到的值加1。00000000000000000000000000000000就变成00000000000000000000000000000001。
00000000000000000000000000000001代表1。
所以11111111111111111111111111111111代表二进制的-1。
为何 ~11 = -12?
11用二进制表示为:00000000000000000000000000001011
取反就是: 11111111111111111111111111110100
可以看出这是一个负数,因为在二进制中,最左位为1表示负数。要找出它的实际值,我们采用二进制补码算法。
第一步,每一个二进制位都取相反值,0变成1,1变成0。比如,11111111111111111111111111110100的相反值就是00000000000000000000000000001011。
第二步,将上一步得到的值加1。00000000000000000000000000001011就变成00000000000000000000000000001100。
00000000000000000000000000001100代表12。(更多关于二进制与十进制相互转换的信息,见
http://denverj.iteye.com/blog/736637)
所以11111111111111111111111111110100代表二进制的-12。
| the OR Operator (或运算符)
以下是《Thinking in java》中的描述:
The bitwise OR operator (|) produces a one in the output bit if either input bit is a one and produces a zero only if both input bits are zero.
如果输入(input)的两位中只要有一个为1,则或运算符会返回1。只有两个都是0,它才返回0。(假设输入(input)是二个十进制数,则先取其二进制表示,再进行具体运算)
示例2
public class TheOrOperator {
public static void main(String args[]) {
// apply the | operator
int x = 11 | 10;
System.out.println("11|10 = " + x);
}
}
为何 11|10 = 11?
11用二进制表示为:00000000000000000000000000001011
10用二进制表示为:00000000000000000000000000001010
执行非运算符对每一位进行运算,得到00000000000000000000000000001011
00000000000000000000000000001011表示11。
& the AND Operator (与运算符)
以下是《Thinking in java》中的描述:
The bitwise AND operator (&) produces a one in the output bit if both input bits are one, otherwise it produces a zero.
如果输入(input)位都是1,则与运算符返回1。否则为0。(假设输入(input)是二个十进制数,则先取其二进制表示,再进行具体运算)
示例3
public class TheAndOperator {
public static void main(String args[]) {
// apply the & operator
int x = 11 & 10;
System.out.println("11&10 = " + x);
}
}
为何 11&10 = 10?
11用二进制表示为:00000000000000000000000000001011
10用二进制表示为:00000000000000000000000000001010
执行非运算符对每一位进行运算,得到00000000000000000000000000001010
00000000000000000000000000001010表示10。
^ the XOR Operator (异或运算符)
以下是《Thinking in java》中的描述:
The bitwise EXCLUSIVE OR, or XOR (^), produces a one in the output bit if one or the other input bit is a one, but not both.
如果输入(input)的两位当中有且只有一个为1,则异或运算符会返回1。
示例4
public class TheXOROperator {
public static void main(String args[]) {
// apply the ^ operator
int x = 11 ^ 10;
System.out.println("11^10 = " + x);
}
}
为何 11^10 = 1?
11用二进制表示为:00000000000000000000000000001011
10用二进制表示为:00000000000000000000000000001010
执行异或运算符对每一位进行运算,得到00000000000000000000000000000001
00000000000000000000000000000001表示1。
参考资料链接:
http://blog.csdn.net/yz394777014/archive/2009/07/28/4387728.aspx
<Thinking in Java 3rd Edtion> Bruce Eckel
分享到:
相关推荐
按位逻辑运算符(Bitwise Logical Operators) - **按位与 (`&`)**:对两个二进制数进行按位与操作,只有当两个相应位都为1时结果才为1。 - 示例:`5 & 3 = 1` - `5` 的二进制表示为 `...
6. **Bitwise Shift Operators (位移运算符)** - **** (左移/右移): 用于位移操作。 - 示例: `int flags = 33 ;` 左移一位。 - 示例: `int flags = 33 >> 1;` 右移一位。 - **左至右关联性**: 表示同等级内...
位异或运算符(Bitwise Exclusive OR) - **`^`**:进行位异或操作。 ### 11. 位或运算符(Bitwise Inclusive OR) - **`|`**:进行位或操作。 ### 12. 逻辑与运算符(Logical AND) - **`&&`**:只有所有条件...
位运算符(Bitwise Operators)如&、|、^、~、和>>用于操作二进制位,对底层数据进行直接操作。 赋值运算符(Assignment Operators & Expressions)如=、+=、-=等用于给变量赋值或进行复合赋值。条件表达式...
位运算符(Bitwise Operators)如按位与(&)、按位或(|)、按位异或(^)和按位非(~)操作二进制位。赋值运算符(Assignment Operators)如 `=`、`+=`、`-=` 等用于赋值和复合赋值。条件表达式(Conditional ...
- 位运算符(Bitwise Operators):对数字的二进制位进行操作,通常用于低级别的优化,初学者可以先了解,不常用。 4. 程序代码的执行过程 在计算机中,JavaScript代码会被编译成机器码,然后由CPU执行。理解这一...
位运算符(Bitwise Operators)如&、|、^、~、、>>等,用于操作二进制位;自增和自减运算符(Increment and Decrement Operators)如++和--,它们可以用于变量的值增加或减少。 类型转换(Type Conversions)涉及到...
- **位运算符**(Bitwise operators)涉及到位级操作,如按位与、或、非和左移、右移。 - **赋值**(Assignment)是将值赋予变量的操作。 文档的后续部分可能涵盖了VP9编码的帧结构、宏块处理、熵编码、运动估计...
位运算符(Bitwise Operators)如按位与(&)、按位或(|)、按位异或(^)和位移(, >>),对二进制位进行操作,常用于低级别的内存操作和高效的数据处理。 赋值运算符及表达式(Assignment Operators & ...
- **位逻辑运算符(Bitwise Logical Operators)**:如`&`, `|`, `^`。 - **指针运算符(Pointer Operators)**:如`*`和`->`。 - **sizeof运算符(The sizeof Operator)**:返回数据类型或变量占用的内存大小。...
5. 位运算符(Bitwise Operators):`&`、`|`、`^`、`~`、`、`>>`,用于对二进制位进行操作。 6. 其他运算符:如三元运算符`?:`,条件表达式;`sizeof`用于获取数据类型的大小;`.`和`->`用于访问结构体或指针中的...
- **6.5.11 位异或运算符(Bitwise exclusive OR operator)** - 对两个整数进行按位异或运算。 - **6.5.12 位或运算符(Bitwise inclusive OR operator)** - 对两个整数进行按位或运算。 - **6.5.13 逻辑与...
- **位运算符(Bitwise operators)**:用于处理二进制位的操作,如按位与、按位或、按位异或等。 - **条件运算符(Conditional operator)**:提供了基于条件执行不同操作的能力。 - **赋值运算符(Assignment)...
5. **Bitwise Operators**: - `-band`:按位与运算符,用于执行二进制位的AND操作。 - `-bor`:按位或运算符,执行包含的OR操作。 - `-bxor`:按位异或运算符,执行不包含的OR操作。 - `-bnot`:按位非运算符,...
5. **位移运算符(Bitwise Shift Operators)**:`、`>>` - 左移运算符`将二进制位向左移动指定的位数,右边用零填充。 - 右移运算符`>>`将二进制位向右移动,根据数据类型可能是逻辑右移(用零填充)或算术右移...
- **位运算符(Bitwise operators)** - **赋值(Assignment)** - **助记符(Mnemonics)** - **常量(Constants)** 5. **约定(Conventions)**:阐述了标准文档中所采用的描述方法和格式。 ### 技术细节 ...
由于部分文字通过OCR扫描可能存在识别错误,这里对扫描错误进行修正并通顺化:在第二版中,还可能涉及一些不在本书摘录内容中的其他知识点,比如2.9 Bitwise Operators,将讨论位运算符,这在嵌入式系统开发和资源...
- Bitwise Operators (位运算符) - Assignment Operators and Expressions (赋值运算符与表达式) - Conditional Expressions (条件表达式) - Precedence and Order of Evaluation (运算符优先级与求值顺序) 4. ...