java获取一个数的二进制的某位

遇到的需求:给我一个byte类型的数,然后获取二进制的第一位第二位,第三位第四位,第五位第六位,第七位第八位..
其实就是把一个十进制的数转换为二进制,然后分为四段拆分。

java 中byte占1个字节,1个字节八位,并且是有符号的,要想是没有符号得自己处理一下,byte & 0xff
或者 if(bye <0) byte+256

进入正题,把byte数拆分为4个
比如一个bye数是
239
转换为二进制
11101111
则要拆分为
11 10 11 11

二进制转换为十进制
1*2^0 + 1* 2^1 +1*2^2 + 1*2^3 + 0*2^4 + 1*2^5 +1*2^6 +1*2^7 =
1 + 2 + 4 + 8 + 0 +32 +64 + 128 = 239

这个当中我想肯定是要使用 >>(右移)和<<(左移)的运算的.但没想到利用2的权重

1110 1111 >>1 = 0111 0111 = 119 和java程序中的 239 /2 = 119 是相等的
1110 1111 >>2 = 0011 1011 = 59 和java程序中的 239/2/2 = 59是相等的
其实这个和2的权重有关(二进制转十进制的换算),
也就是说右移1位 等于 十进制数除以2
右移两位就是 除以2的2次方,以此类推
左移1位就是乘以2,左移两位就是乘以2的二次方,以此类推

单单是上面的操作并不能获取二进制的某位,最多也就是左移和右移
要想可以获取到某位上的数,使用%(求余)

十进制:239
转换为二进制
1110 1111
获取二进制的第七第八位,右移6位:239/ Math.pow(2, 6)
获取二进制的第五第六位: (239/ 16) % 4
这里对4求余是保留低两位,保留低一位就对2求余,保留低两位就是对2的2次方求余,这个也是利用了权重
这里写图片描述

获取二进制的第三第四位: (239 / 4) % 4
获取二进制的第一第二位: 239% 4

你可能感兴趣的:(BLE)