java~"与运算"实现保留一个数的低8位
int类型另外介绍
- int类型的封装类型是Integer类型,它是有符号的类型,即它有负数和正数两部分,最小为-232,最大值是232-1。
- int类型由32位二进制数组成,每4位二进制数表示为1位16进制数,每8位2进制数占用存储空间为1字节、即每2位16进制也占用1字节
- 一个int类型的数字,占用32/8=4,占用的存储空间为4个字节
- 对一个数字n与0xff做与运算,相当于将n的二进制表示的低8位保留下来,并将高24位清零。
- 0xff(十进制为255)的二进制表示为11111111,它是一个8位二进制数,与任何一个整数做
与运算
都只能得到这个整数的低8位(即最右边的8位),其余位都会被清零
。
与运算例子
与运算
在计算时,先把10进制转成2进制,再把两个2进制进行与运算
,位数不够,在左面补0,两个数位置的数全1则1,有0则0、例如:1&1=1、1&0=0,0&0=0 。- 例如,数字128的二进制表示为10000000,如果对它执行128 & 0xff,结果为0x80,与128的二进制表示10000000保留的是最右边的8位,而其余位置0,因此返回的值为0x80。
- 再比如,数字256的二进制表示为100000000,如果对它执行256 & 0xff,结果为0,与256的二进制表示100000000保留的是最右边的8位,而其余位置0,因此返回的值为0。
- 这个操作在进行位运算和字节数组处理时经常使用,尤其是在处理有符号和无符号整数的补码表示时,有助于保留整数的正确值。
DataOutputStream中对它的使用
- & 0xFF 低8位保留,高24位清零
-
无符号的右移,>>>8表示右移8位,即相当于除以2^8次方
public final void writeShort(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}