在Java语言中,提供了7种位运算符,分别是按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、带符号右移(>>)和无符号右移(>>>)。
位运算符是对long、int、short、byte和char这5种类型的数据进行运算的,我们不能对double、float和boolean进行位运算操作。
byte a = 10;
a & (byte )0xFF: 结果就是a的值。
a | (byte )0xFF: 结果就是255的值。
a & (byte )0x00: 结果就是0的值。
a | (byte )0x00: 结果就是a的值。
Java 如何判定字节变量a是否符合某个指定的格式,如:0xxxxxxx,110xxxxx,1110xxxx,11110xxx,10xxxxxx。
确定指定位置为0是否符合格式的方法:将指定格式中的x和1都用0替换,0用1替换,得到的字节b与a变量进行与运算,如果结果为0,则说明a变量的补码中的0是符合格式的,但1不一定。
如果(a & (byte)0x80) == 0 为true,则a符合0xxxxxxx格式。(b=(byte)0x80)
如果(a & (byte)0x40) == 0 为true,则a符合x0xxxxxx格式。
如果(a & (byte)0x20) == 0 为true,则a符合xx0xxxxx格式。
如果(a & (byte)0x10) == 0 为true,则a符合xxx0xxxx格式。
如果(a & (byte)0x08) == 0 为true,则a符合xxxx0xxx格式。
确定指定位置为1是否符合格式的方法:将指定格式中的x都用0替换,原来的0和1保持不变,得到的字节b与a变量进行与运算,如果结果为b,则说明a变量的补码中的1是符合格式的,但0不一定。
如果(a & (byte)0x80) == (byte)0x80 为true,则a符合1xxxxxxx格式。
如果(a & (byte)0xC0) == (byte)0xC0为true,则a符合11xxxxxx格式。
如果(a & (byte)0xE0) == (byte)0xE0 为true,则a符合111xxxxx格式。
如果(a & (byte)0xF0) == (byte)0xF0 为true,则a符合1111xxxx格式。
如果(a & (byte)0xF8) == (byte)0xF8 为true,则a符合11111xxx格式。
必须同时满足0和1位置都符合,才可以确定变量a是符合指定格式的。