右移动24位,导致高24为全是0 再进行按位于操作,不还是原来那个数吗?怎么就清零了呢?
writeInt()方法中的源码 每次读取字节信息 都是经过了一次无符号右移和位与操作。 而老师在写入一个字节的时候并没有写位与操作。 因此其实写不写都可以 因为每次读取的信息都是低八位。 但是源码中的位与操作 确实做到了“清零”。 这个清零意思指的是 将前面24高位均置为0.
举负数说明: 11111111 11111111 11101000 11110111
右移24位 00000000 00000000 00000000 11111111 位与0xff 后 结果 为0xff 读取 0xff
右移16位 00000000 00000000 11111111 11111111 位与0xff后 结果为 0xff 读取 0xff
右移8位 00000000 11111111 11111111 11101000 位与0xff后 结果为 0xe8 读取0xe8
右移0位 11111111 11111111 11101000 11110111 位与0xff后 结果为0xf7 读取0xf7
看资料说 读取字节信息 进行位与0xff操作 是为了保证二进制数据的一致性。 这样传输的二进制信息是安全的。
位于不就是对应相乘吗
一次就读8个bit啊,所以清零了你也不用读。就算不清零你也读不到
一次就读8个bit啊,所以清零了你也不用读。就算不清零你也读不到