问答详情
源自:3-1 RandomAccessFile基本操作

与0xff进行按位于操作,是怎么做到清零的?

右移动24位,导致高24为全是0 再进行按位于操作,不还是原来那个数吗?怎么就清零了呢?http://img2.mukewang.com/5a16718800018ee308350234.jpg

提问者:织梦_ 2017-11-23 14:58

个回答

  • 慕瓜306993
    2019-05-01 20:31:46

     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操作 是为了保证二进制数据的一致性。  这样传输的二进制信息是安全的。


  • qq_逆翔_0
    2018-05-10 10:46:25

    位于不就是对应相乘吗

  • evilMuta
    2017-11-24 18:10:55

    一次就读8个bit啊,所以清零了你也不用读。就算不清零你也读不到

  • evilMuta
    2017-11-24 18:10:52

    一次就读8个bit啊,所以清零了你也不用读。就算不清零你也读不到