0xff有关的与运算

来源:4-2 字节流之文件输入流FileInputStream-2

慕粉2138545409

2017-04-27 22:13

byte型数据(比如-14)和0xff进行与运算,会改变它的正负号吗?

写回答 关注

2回答

  • 袁初
    2017-04-28 14:12:17
    已采纳

    byte---字节类型,即一个字节,占8位,最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

    Java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。

    正数补码为其本身;
    负数补码为其绝对值各位取反加1;

    (-14),按照概念其绝对值为0000 1110,各位取反为1111 0001,再加1为1111 0010,即(-14)的二进制表示形式为11110010。

    1111 0010 & 0xff,与运算后结果为1111 0010,结果还是(-14),所以不改变其正负号。

        


  • 慕粉2138545409
    2017-04-28 15:45:32

    好像不对啊,我测试了一下,申明一个byte类型的数-14,输出它与0xff与运算的结果,不是-14,而是242

    袁初

    如果是这样,我觉得不妥,因为Java中是用补码表示二进制数,所以(-14)&0xff得到的结果(1111 0010)是二进制的补码,而不是(-14)的二进制表示形式,如果直接输出得到的仅是二进制(1111 0010)转化为十进制后的数,即242,转化时忽略了最高是符号位; 从另一种角度理解:这里涉及的0xff与操作,仅仅是为了简化IO流的输出显示,而不应该改变原来的文件内容。

    2017-04-28 19:43:48

    共 2 条回复 >

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题