为了账号安全,请及时绑定邮箱和手机立即绑定

0xff有关的与运算

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

正在回答

2 回答

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

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

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

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

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

    


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

袁初

打印输出为242,我觉得你可能使用下面的输出语句: System.out.println(a & 0xff);//结果为242 System.out.println(Integer.parseInt("11110010", 2));//结果为242 System.out.println(Integer.valueOf("11110010",2));//结果为242
2017-04-28 回复 有任何疑惑可以回复我~
#2

袁初

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

举报

0/150
提交
取消
文件传输基础——Java IO流
  • 参与学习       133751    人
  • 解答问题       1030    个

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

进入课程

0xff有关的与运算

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信