高手帮忙解读一段代码

private int readInt(int offset) {
return ((imgData[offset] & 0xFF) << 24)
| ((imgData[offset + 1] & 0xFF) << 16)
| ((imgData[offset + 2] & 0xFF) << 8)
| ( imgData[offset + 3] & 0xFF);
}

最好详细点
具体到& 0xFF什么用、<< 24什么用

第1个回答  2008-08-26
& 0xFF :取后面8位。前面置0

<<24 :右移24位,后面补0

| :或

主要是移位来取得一个整型数据.
比如要返回一个整型数据:四个字节的话.可以用这个方法分别设置各个字节

imgData[offset]和0xFF按位与,&是按位与,0xFF是一个十六进制数,<<24表示左移24位(对应二进制数).
4个括号里的算出来以后,进行或运算,然后将结
第2个回答  2008-08-26
imgData 不清楚是个什么数组 看上下文应该是byte

& 0xFF 是将低8bit保持不变, 剩下的高位清0
<<24 是将数据左移24bit

看代码类似拼接数据
应该是将几个字节拼成32bit的int

这个函数的作用. 是将数组 offset位置开始的4个byte拼接成一个整数....

这样的做法有待商诠.... 程序作者没有考虑到符号位和补码...
如果是我. 会将位移换成乘法来避免最高位符号位的问题, 血的教训啊...帮我bs一下作者, 他的计算机原理还需要补习...
另. 如果数据来自网络. 还需要处理网络字节序
这段代码只能正确处理unsigned int, 其他要自己小心本回答被提问者采纳
第3个回答  2008-08-26
imgData[offset]和0xFF按位与,&是按位与,0xFF是一个十六进制数,<<24表示左移24位(对应二进制数).
4个括号里的算出来以后,进行或运算,然后将结果返回。
第4个回答  2008-08-26
& 0xFF :取后面8位。前面置0

<<24 :右移24位,后面补0

| :或

主要是移位来取得一个整型数据.
比如要返回一个整型数据:四个字节的话.可以用这个方法分别设置各个字节
第5个回答  2008-08-26
一楼和三楼的。你们连左移右移都分不清楚。还到这里来回答。真是误人子弟啊。!<<24是左移24位, 箭头指向左边就是左移符号。指向右边就是右移符号!
相似回答
大家正在搜