为何11001111十进制是-49;但是11001111通过&ff之后,就变成十进制207了呢?
为何11001111十进制是-49;但是11001111通过&ff之后,就变成十进制207了呢?
为何11001111十进制是-49;但是11001111通过&ff之后,就变成十进制207了呢?
2016-12-29
/** * 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类型的 但反过来可以。 */
雪域鬼怪已经回答很好 但是有点小瑕疵 不纠正的话以后很有可能犯错误 有点小瑕疵 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
举报