1、位运算的理解
位运算就是按位运算,例如:整数数1 在计算机里表示为 00000001 --单字节 00000000 00000001 -- 双字节。放在java里,若数值属于int类型则为 4字节,若数值属于byte 则为 2字节
位运算实例:
byte a,b=1;
// a,b 的二进制值都是,00000000 0000001
byte c=a&b;
//a,b 进行逻辑与
// a -> 00000000 00000001
// b -> 00000000 00000001
// a&b -> 00000000 00000001 (按位取与,1表示true 0 表示false,所以,只有个位两个数都是true)
同理其他的位运算也是如此理解。
2、实际应用:
byte a= - 40; // 整数值就应该为 128(byte负数最小范围)-40(实际据最小值多少)+128(去掉了符号位,故数值位增一位,表达范围增128)=216
// 11011000
int c=a&0xff;// 这句其实等同于 int c; int tmp=(int)a; int true_8bit=0xff;c=tmp&true_8bit; 即将byte强制转换成了int后操作
// a -> 111111111 11111111 11111111 11011000 由于是负数,转为int 除了扩充空间外,还保留符号
// 0xff -> 000000000 00000000 00000000 11111111 (0xff 的二进制值)
// c -> 000000000 00000000 00000000 11011000 =216
这样运算后我们发现,这次运算其实起到了去掉前3个字节(由于转int 而扩展出来的本来不应存在的符号位)。测试一下可以发现c的值就是216
这样就完成了 byte 向int 型数据的转换。在使用java进行网络开发时,我们往往直接得到的就是byte,此时经常会出现转换成int 后进行判断等场景。
也有少数设备使用位进行状态标识。如:int k= 4 = 00000100,则表示第三个字段是真,事先规定好使用第三位来表示“第三种情况”。则判断是否为“第三种情况”的时候可直接 使用 int m= k & 4 直接判断m是否为0 即可得出是否包含了“第三种情况”。
位运算的理解及用途
最新推荐文章于 2023-06-13 16:52:27 发布