Java中的位运算【转】
来源:互联网 发布:数控车圆球编程实例 编辑:程序博客网 时间:2024/05/21 15:34
转自http://hi.baidu.com/personnel/item/f17e835e58b8fd10db163550
问题1:
字节数组转换为 short
private static short bytesToShort(byte[] bs)
{
}
我的理解:bs[1] << 8(高位左移8位),然后与低位(bs[0])直接进行 | (或运算) 不就行了吗?
当然我的理解在测试下证明是错误的,为什么非要在低位先进行 & 0xff ?。
答案:
bs[0] & 0xff运算的时候会将bs[0]按符号先扩展为int类型。
如果bs[0]为负数,bs[0]扩展后前24位都是1,与0xFF与运算后,前24位就变成0了
问题2:
网上一般都这么写
private static short bytesToShort(byte[] bs)
{
}
但我测试发现,高8位没必要 & 0xff00,结果也是正确的。
解答:
bs[1] << 8
假设bs[1]是11001011
先转换成int:11111111 11111111 11111111 11001011
左移8位 :11111111 11111111 11001011 00000000
结果一样是因为强转为short了,你先把强转去掉,让返回值为int
强转为short:11001011 00000000
位运算符的优先级
~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|。
>>:
被移走的最高位由原来的最高位填补,正数的补0,负数的补1。这个就是符号位扩展,byte转化成int,正数则前面的24位都补0,负数则都补1
不错的文章:http://www.360doc.com/content/06/0803/20/8473_172708.shtml
- Java中的位运算【转】
- Java 中的位运算
- JAVA 中的位运算
- Java 中的位运算
- java中的位运算
- Java 中的位运算
- Java 中的位运算
- JAVA中的位运算
- Java中的位运算
- Java 中的位运算
- JAVA中的位运算
- java 中的位运算
- Java 中的位运算
- Java中的位运算
- Java中的位运算
- Java中的位运算
- Java中的位运算
- Java 中的位运算
- 数据库发展史
- Delphi 中的MD5实现方法(转)
- 百度词库格式分析
- 函数参数传递详解
- uva10905同一思路的两种做法,前一种WA,后一种AC
- Java中的位运算【转】
- 我的设计印象
- php字符串简介
- Git原理以及常用命令介绍
- KMP算法
- Web开发错误及解决办法
- 经典算法和OJ网站(开发者必备)
- 后期修行
- lua学习:使用Lua处理游戏数据