http://en.wikiversity.org/wiki/Bitwise_operators
http://en.wikipedia.org/wiki/Binary_numbers
一旦您学会了如何以 2 为底数(二进制或“位”)表示数字,按位运算符就很容易理解了。
我只举一个简单的例子:
设 m=31532=111101100101100 和 n=12325=11000000100101。
那么n & m(按位与-二元运算符)的结果是:
(如果n(i)和m(i)都为1,则结果为1,否则为0)
111101100101100
011000000100101
===============
011000000100100
n 的结果 | m(按位或 - 二元运算符)是:
(如果n(i)和m(i)为0,则结果为0,否则为1)
111101100101100
011000000100101
===============
111101100101101
n ^ m(按位异或 - 二元运算符)的结果是:
(如果 n(i) 和 m(i) 中的一个为 1,但不是两者,则结果为 1,否则为 0)
111101100101100
011000000100101
===============
100101100001001
~n(按位非 - 一元运算符)的结果是:
(如果 n(i)=1 则结果为 0,否则为 1)
111101100101100
===============
000010011010011
设k=3,n>>k(按位右移)的结果为:
111101100101100
===============
000111101100101
他们只是向右移动了 k=3 次。这有效地将数字除以 2^k=8。它通常被编译器用作优化。
反之,设k=3,n
111101100101100
===============
101100101100000
他们只是向左移动了 k=3 次。这有效地将数字乘以 2^k=8。这里需要注意的一点是,由于 32bit 整数最多只能容纳 2^32-1,出现了算术溢出,即高 k 位被截断。
您只需要仔细查看并找出这些模式。
它们在编程中很重要,因为它们通常用于设置/清除标志值。
由于 int32 有 32 个二进制数字,它可以包含多达 32 种不同类型的布尔标志(0 表示假,或 1 表示真)
我想这就是它。它们相当直观。