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回答

Qiujuer

2018-10-27

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的时候还会有一次讲解,两次结合一起后就懂了

3
1
Lymanhan
非常感谢!
2018-10-27
共1条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程