`

Java位运算符(JAVA Bitwise Logical Operators)

阅读更多
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
2
0
分享到:
评论

相关推荐

    Java 中的位运算

    按位逻辑运算符(Bitwise Logical Operators) - **按位与 (`&`)**:对两个二进制数进行按位与操作,只有当两个相应位都为1时结果才为1。 - 示例:`5 & 3 = 1` - `5` 的二进制表示为 `...

    C++ 运算符优先级列表

    6. **Bitwise Shift Operators (位移运算符)** - **** (左移/右移): 用于位移操作。 - 示例: `int flags = 33 ;` 左移一位。 - 示例: `int flags = 33 &gt;&gt; 1;` 右移一位。 - **左至右关联性**: 表示同等级内...

    C++运算符优先级

    位异或运算符(Bitwise Exclusive OR) - **`^`**:进行位异或操作。 ### 11. 位或运算符(Bitwise Inclusive OR) - **`|`**:进行位或操作。 ### 12. 逻辑与运算符(Logical AND) - **`&&`**:只有所有条件...

    题一:Data Types, Operators and Expressions1

    位运算符(Bitwise Operators)如&、|、^、~、和&gt;&gt;用于操作二进制位,对底层数据进行直接操作。 赋值运算符(Assignment Operators & Expressions)如=、+=、-=等用于给变量赋值或进行复合赋值。条件表达式...

    C程序设计英文课件:CHAPTE 2 Types,Operators and Expressions.ppt

    位运算符(Bitwise Operators)如按位与(&)、按位或(|)、按位异或(^)和按位非(~)操作二进制位。赋值运算符(Assignment Operators)如 `=`、`+=`、`-=` 等用于赋值和复合赋值。条件表达式(Conditional ...

    JavaScript+js语法基础+js数据类型+js数据类型转换+js运算符

    - 位运算符(Bitwise Operators):对数字的二进制位进行操作,通常用于低级别的优化,初学者可以先了解,不常用。 4. 程序代码的执行过程 在计算机中,JavaScript代码会被编译成机器码,然后由CPU执行。理解这一...

    题二:Control Flow Functions and Structure1

    位运算符(Bitwise Operators)如&、|、^、~、、&gt;&gt;等,用于操作二进制位;自增和自减运算符(Increment and Decrement Operators)如++和--,它们可以用于变量的值增加或减少。 类型转换(Type Conversions)涉及到...

    vp9-视频编码标准规范.pdf

    - **位运算符**(Bitwise operators)涉及到位级操作,如按位与、或、非和左移、右移。 - **赋值**(Assignment)是将值赋予变量的操作。 文档的后续部分可能涵盖了VP9编码的帧结构、宏块处理、熵编码、运动估计...

    题三:Pointers and Arrays Structures, Unions and Bit-Fields1

    位运算符(Bitwise Operators)如按位与(&)、按位或(|)、按位异或(^)和位移(, &gt;&gt;),对二进制位进行操作,常用于低级别的内存操作和高效的数据处理。 赋值运算符及表达式(Assignment Operators & ...

    The GNU C Reference Manual.pdf

    - **位逻辑运算符(Bitwise Logical Operators)**:如`&`, `|`, `^`。 - **指针运算符(Pointer Operators)**:如`*`和`-&gt;`。 - **sizeof运算符(The sizeof Operator)**:返回数据类型或变量占用的内存大小。...

    C语言程序设计教程课件:2_a_DatatypesOperators.ppt

    5. 位运算符(Bitwise Operators):`&`、`|`、`^`、`~`、`、`&gt;&gt;`,用于对二进制位进行操作。 6. 其他运算符:如三元运算符`?:`,条件表达式;`sizeof`用于获取数据类型的大小;`.`和`-&gt;`用于访问结构体或指针中的...

    ANSI C标准文档 1999

    - **6.5.11 位异或运算符(Bitwise exclusive OR operator)** - 对两个整数进行按位异或运算。 - **6.5.12 位或运算符(Bitwise inclusive OR operator)** - 对两个整数进行按位或运算。 - **6.5.13 逻辑与...

    ISO/IEC 15938-3, Information technology — Multimedia content description interface — Part 3: Visual

    - **位运算符(Bitwise operators)**:用于处理二进制位的操作,如按位与、按位或、按位异或等。 - **条件运算符(Conditional operator)**:提供了基于条件执行不同操作的能力。 - **赋值运算符(Assignment)...

    WINDOWS POWERSHELL 4.0 LANGUAGE QUICK REFERENCE - 4页

    5. **Bitwise Operators**: - `-band`:按位与运算符,用于执行二进制位的AND操作。 - `-bor`:按位或运算符,执行包含的OR操作。 - `-bxor`:按位异或运算符,执行不包含的OR操作。 - `-bnot`:按位非运算符,...

    C++符号优先级(详细整理)

    5. **位移运算符(Bitwise Shift Operators)**:`、`&gt;&gt;` - 左移运算符`将二进制位向左移动指定的位数,右边用零填充。 - 右移运算符`&gt;&gt;`将二进制位向右移动,根据数据类型可能是逻辑右移(用零填充)或算术右移...

    ISO13818 Mpeg 标准

    - **位运算符(Bitwise operators)** - **赋值(Assignment)** - **助记符(Mnemonics)** - **常量(Constants)** 5. **约定(Conventions)**:阐述了标准文档中所采用的描述方法和格式。 ### 技术细节 ...

    The C programming language 2nd

    由于部分文字通过OCR扫描可能存在识别错误,这里对扫描错误进行修正并通顺化:在第二版中,还可能涉及一些不在本书摘录内容中的其他知识点,比如2.9 Bitwise Operators,将讨论位运算符,这在嵌入式系统开发和资源...

    C程序设计语言(英文第2版)The C Programming Language(2nd Edition)pdf

    - Bitwise Operators (位运算符) - Assignment Operators and Expressions (赋值运算符与表达式) - Conditional Expressions (条件表达式) - Precedence and Order of Evaluation (运算符优先级与求值顺序) 4. ...

Global site tag (gtag.js) - Google Analytics