首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

位演算的理解及用途

2012-11-09 
位运算的理解及用途1、位运算的理解位运算就是按位运算,例如:整数数1 在计算机里表示为 00000001 --单字节

位运算的理解及用途

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 即可得出是否包含了“第三种情况”。

热点排行