3

java~"与运算"实现保留一个数的低8位

 1 year ago
source link: https://www.cnblogs.com/lori/p/17400792.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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);
    }

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK