byte位运算的疑问
来源:4-8 案例实操-TCP基础数据传输-2
Lymanhan
2018-10-27
这里我有点问题,假设 int a = 00001000 00000100 00000010 00000001
第1步(a >> 24) & 0xFF 的结果是多少呢?是00001000,还是00000000 00000000 00000000 00001000?
第2步,a经过第一步左移24以后,第二步的a还是原来的a吗?
写回答
1回答
-
1: 结果是:00000000 00000000 00000000 00001000 但等效
2. 右移 24 后,a还是a,a的值不变。可以理解为他不是一个单步操作,而是多步操作:
a右移动24得到b,然后把b&0xFF得到c。abc都不同
int 强制转换为 byte时不是丢失4位。
int 占4byte。4*8 = 32 位。转换为byte时是丢失高位的24位。
另外 0xFF ,不是 11111111 11111111 11111111 11111111 而是:11111111
对于int a来说:
11111111 11111111 11111111 11111111
对于0xFF来说其实是一个byte,占8位;所以是:
11111111
当出现 a&0xFF时会出现一个强转换的操作,把0xFF (byte) -> 0xFF(int)的操作,但是高位补0,所以是:
00000000 00000000 00000000 11111111
然后两者再算 & 操作。
这个问题 别担心,在后面Long的时候还会有一次讲解,两次结合一起后就懂了
312018-10-27
相似问题