int i;
i = 42;
System.out.println(Integer.toBinaryString(i));
System.out.println("第一位为:"+((i >> 0) & 1));
System.out.println("第二位为:"+((i >> 1) & 1));
System.out.println("第三位为:"+((i >> 2) & 1));
这是问题一。

解决方案 »

  1.   

    int modify=2;//修改第二位即十位数
        int value=0;//修改后的值
        int i=42;
        int length=Integer.toBinaryString(i).length();
        System.out.println("修改之前:"+Integer.toBinaryString(i));
        int newI=0;
        if (value==0)
        {
          newI=(int)((Math.pow(2,length)-1)-(Math.pow(2,modify-1)));
          i=i & newI;
        }
        else if (value==1)
        {
          newI=(int)(Math.pow(2,modify-1));
          i=i | newI;
        }
        System.out.println("修改之后:"+Integer.toBinaryString(i));异常处理自己写!
      

  2.   

    //value  要判断的数字
    //bot pos
    public boolean  bitIs1(int value,int bitPos){
       int temp = value >> (bitPos-1);
       temp = temp & 0x0001;
       return temp!=0;
    }
      

  3.   

    //问题2,注,bitPos是从低位算起,最低为1,倒数第二为2
    public int changeBitValue(int value,int bitPos){   
       int temp = (int)(Math.pow(2,bitPos-1));
       return  value^temp;      
    }