>>8) & 0xFF中的 >> 和 &0xFF 的作用 | 您所在的位置:网站首页 › oxff转化为二进制 › >>8) & 0xFF中的 >> 和 &0xFF 的作用 |
参考:https://blog.csdn.net/iamgamer/article/details/79354617 其中有两个位运算,一个是>>,一个是&。 0xff的作用一: 十六进制0xff的长度是一个字节,即八位,二进制为:1111 1111,那么一个 8bit 数与1111 1111与运算还是这个数本身,但是一个16bit 数与 0xff就被截断了,比如 1100110011001100 & 0xff结果为 11001100。那如果想不被截断怎么办?把0xff扩展为二个字节即:0xffff,那么以此类推,0xffffff,0xffffffff都出来了。 0xff的作用二: java专属,由于java没有unsigned类型,所以为了适应与其他语言二进制通讯时各种数据的一致性,需要做一些处理。 最直观的例子:int a = -127 & 0xFF ; // 等同于 unsigned int c = 129; (这里的-127与129是字节,只为了直观而写的具体数字) 这里要严格说明一点:再32位机器上,0xff实际上是 0x00000000 00000000 00000000 11111111, 而-127是 11111111 11111111 11111111 10000001 (补码形式), 那么-127 & 0xff的结果自然是 00000000 00000000 00000000 10000001 即 129. 简而言之,该作用主要是为了将 有符号数转换为无符号数。 >>8的作用: 这个是根据需求而定的,可以是>>8也可以是>>16,>>24,等等 而跟 & 0xff运算的意义其实就是截断,将123456的高位右移8位,通过0xff截取出来。实际意义就是取字节,比如一个4字节的数,需要将每个字节内容取出来转换出目标数据,那么通过>> 并且 &0xff 运算 就可以去除想要的部分。 再详细点:4字节 ,32 位,按照大端方式排列, 最高位 最低位 11111111 10101010 11000011 10101010 最高位8字节要移到最低位那么,这个8个字节>>(3*8),然后与0xff运算,取出,然后后续得>>(2*8) & 0xff ;>>(1*8) & 0xff,均可取出。
再来一个简单的例子巩固基础: int a = 1234567890; byte b1[] = new byte[4]; // b1[0] = (byte) (a & 0xff); // b1[1] = (byte)((a >> 8) & 0xff); // b1[2] = (byte)((a >> 16) & 0xff); // b1[3] = (byte)((a >> 24) & 0xff); b1[0] = (byte)((a >> 24) & 0xff); b1[1] = (byte)((a >> 16) & 0xff); b1[2] = (byte)((a >> 8) & 0xff); b1[3] = (byte) (a & 0xff); int b2 = (b1[0]& 0xff) |
CopyRight 2018-2019 实验室设备网 版权所有 |