问题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呢?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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  %                  
    敬礼!
      

  2.   

    作用范围的问题 欢迎来
    我们的java世界ourjavasky 针对层次不同量身学习java技术
    www.ourjavasky.cn
      

  3.   

    问题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
      

  4.   


    看下面这个,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
      

  5.   

    关于6楼的回答,其实我调用Integer.toBinaryString()方法,只是好奇的看看二进制,没有这个它一样会转成-11的。
      

  6.   

    System.out.println("i: " + Integer.toBinaryString(i));//虽然打印出1010,但实际省略了前导0
    System.out.println("Leading Zeros: " + Integer.numberOfLeadingZeros(i));//打印出28,表示有28个前导0
      

  7.   


    晕,我算是白说了!如果你把一个未指定具体类型的整数付值给byte型的变量,那么这个整数默认是int型的,而0xffff表示的int值是65535,这超过了byte型所能表示的最大值127,当然是不能付值的了!
    byte a = (byte)0xffff;//这样就可以了,但为了转换成byte型,会把前24位舍去,也就是相当于转换成byte a = (byte)0xffff;另外,你上面的分析也是不正确的!