6.3 按位运算
6.3.1 位运算概述
符号 | 描述 | 运算规则 | 实例 |
---|---|---|---|
& | 与 | 两个位都为1时,结果才为1。 | 0001&0001=1,0001&0000=0,0000&0000=0000 |
| | 或 | 两个位都为0时,结果才为0。 | 0001 |
^ | 异或 | 两个位相同为0,相异为1。 | 0001∧0001=0000,0001∧0000=1,0000∧0000=0 |
~ | 取反 | 0变1,1变0。 | ∼0=1,∼1=0 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0。 | 0001<<k=0100,k=2,k kk是左移的位数,这里k = 2 |
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,右移补1 11。 | 0100>>k=0001,k=2,k kk是右移的位数,这里k = 2 |
6.3.2 & 0xff 位运算
&表示按位与,只有两个位同时为1,才能得到1, 0x代表16进制数,0xff表示的数二进制1111 1111 占一个字节.和其进行&操作的数,最低8位,不会发生变化.
(1)只是为了取得低八位
out.write((message.length>>8)&0xff);//取高八位写入地址
out.write(message.length&0xff);//取低八位写入高地址中
例如,有个数字 0x1234,如果只想将低8位写入到内存中 0x1234&0xff
0x1234 表示为二进制 0001001000110100
0xff 表示为二进制 1111 1111
与操作 1&0 =0 1&1 =1 这样 0x1234只能保留低八位的数 0000000000110100 也就是 0x34
示例:对0x64 & 0x00000000FF 求值
首先,需要了解一些基本概念和计算方式。ox64表示十六进制数64,0x00000000FF表示十六进制数FF,其中字母F代表15,因此十六进制数FF表示的十进制数为255。在进行位运算时,需要将数值转换为二进制数后进行计算。我们将分别对ox64和0x00000000FF进行二进制转换,并按位进行AND运算。
首先,将ox64转换为二进制数:
6 -> 0110 4 -> 0100
因此,ox64的二进制表示为01100100。
接下来,将0x00000000FF转换为二进制数: FF -> 11111111
按位进行AND运算,即对每一位进行比较并取值,得到以下结果:
01100100 AND 11111111 = -------- 01100100
因此,ox64 & 0x00000000FF等于01100100的二进制,转换为十六进制数为0x64,转换为十进制数为100。
因此,ox64 & 0x00000000FF等于100;