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

为何11001111十进制是-49;但是11001111通过&ff之后,就变成十进制207了呢?

为何11001111十进制是-49;但是11001111通过&ff之后,就变成十进制207了呢?

正在回答

4 回答

/**
*    11001111 = -49是byte类型 占8bit
*    进行&运算时会自动转换类型为int 占32bit
*    最高位为符号位  0为正数 1为负数
*    即
*    0000 0000 0000 0000 1111 1111 1111 1111(正数)
*    &                             1100 1111(负数)
*---------------------------------------------
*    0000 0000 0000 0000 0000 0000 1100 1111  = 207
*    
*    ps:其实在java中如果一个数不指定类型  JVM会有一个默认类型的  整型默认是int
*        浮点型默认为double 比如说byte a = 10; byte b = a + 1; //这个是错的 因为1是Int类型 
*        int类型是不能自动转换成Byte类型的  但反过来可以。
*/


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

斯缔璺 提问者

非常感谢!
2016-12-31 回复 有任何疑惑可以回复我~
#2

三爷JaVaja

有点小瑕疵 byte -49转成int时 是在前面补全24个1,而不是000...0000(所以用(int)强转值还是-49而不是207 )
2017-06-06 回复 有任何疑惑可以回复我~
雪域鬼怪已经回答很好 但是有点小瑕疵 不纠正的话以后很有可能犯错误
有点小瑕疵 byte -49转成int时 是在前面补全24个1,而不是000...0000(所以用(int)强转值还是-49而不是207 )
所以当你想用byte表示无符号数字时 byte转int前面补充的是1 只能用0xff切断然后再输出的时候才会在前面自动补0  
byte g=-49;
System.out.println(Integer.toBinaryString(g));
System.out.println(Integer.toBinaryString((g&0xffff)));
System.out.println(Integer.toBinaryString((g&0xff)));
System.out.println(g);
System.out.println((g&0xffff));
System.out.println((g&0xff));

运行结果

11111111111111111111111111001111

1111111111001111

11001111

-49

65487

207


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

弄明白了,谢啦

0 回复 有任何疑惑可以回复我~
谢谢了,受教了,非常感谢!
0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
二进制基础
  • 参与学习       99871    人
  • 解答问题       210    个

二进制是计算机唯一能识别的语言,是学习计算机技术必备的知识

进入课程

为何11001111十进制是-49;但是11001111通过&ff之后,就变成十进制207了呢?

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