问题1:
byte a = 0xffff;
byte b = 0xffffffff;为什么b的结果是 -1 而 a 的结果确是错误,并且 fffff(5个f)-fffffff(7个f)都不行,只有8个f才可以是-1问题2:
public class Test{
public static void main(String[] args){
byte i = 10;
System.out.println("i: " + Integer.toBinaryString(i));
System.out.println("i: " + Integer.toBinaryString(~i));
System.out.println(~i);
}
}为什么结果是 -11? 10的二进制是 00001010 那进行非运算后应该是 11110101 为什么会是-11呢?
byte a = 0xffff;
byte b = 0xffffffff;为什么b的结果是 -1 而 a 的结果确是错误,并且 fffff(5个f)-fffffff(7个f)都不行,只有8个f才可以是-1问题2:
public class Test{
public static void main(String[] args){
byte i = 10;
System.out.println("i: " + Integer.toBinaryString(i));
System.out.println("i: " + Integer.toBinaryString(~i));
System.out.println(~i);
}
}为什么结果是 -11? 10的二进制是 00001010 那进行非运算后应该是 11110101 为什么会是-11呢?
楼主【llm0528】截止到2008-07-10 11:37:29的历史汇总数据(不包括此帖):
发帖的总数量:46 发帖的总分数:920 每贴平均分数:20
回帖的总数量:39 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:46 结贴的总分数:920
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
我们的java世界ourjavasky 针对层次不同量身学习java技术
www.ourjavasky.cn
byte a = 0xffff; //因0xffff是整型的65535,已经超过了byte型可表示的最大值,所以编译时就报错byte b = 0xffffffff; //因0xffffffff是整型的-1,byte型可表示的数据范围内,所以没有问题问题2:
Integer.toBinaryString(i));会先把byte型的10转成int型的10,而int型的10二进制表示为0000000000001010,所以取反为11111111111111111111111111110101,
也就是整型的-11
看下面这个,Integer.toBinaryString(i));应为Integer.toBinaryString(~i));
问题1:
byte a = 0xffff; //因0xffff是整型的65535,已经超过了byte型可表示的最大值,所以编译时就报错 byte b = 0xffffffff; //因0xffffffff是整型的-1,byte型可表示的数据范围内,所以没有问题 问题2:
Integer.toBinaryString(~i));会先把byte型的10转成int型的10,而int型的10二进制表示为0000000000001010,所以取反为11111111111111111111111111110101,
也就是整型的-11
System.out.println("Leading Zeros: " + Integer.numberOfLeadingZeros(i));//打印出28,表示有28个前导0
晕,我算是白说了!如果你把一个未指定具体类型的整数付值给byte型的变量,那么这个整数默认是int型的,而0xffff表示的int值是65535,这超过了byte型所能表示的最大值127,当然是不能付值的了!
byte a = (byte)0xffff;//这样就可以了,但为了转换成byte型,会把前24位舍去,也就是相当于转换成byte a = (byte)0xffff;另外,你上面的分析也是不正确的!