public class Test{
    public static void main(String args[]){
        int i = 0xFFFFFFF1;
        int j=~i;
        System.out.println(j); 
   }}为什么这个程序运行之后j=14。我知道i=-15,可就是在int j=-i这里不知道怎么算的,请各位帮我解决。说出详细的计算过程。

解决方案 »

  1.   

    ~这是取反操作符,是按照One's Complement的法则计算的http://en.wikipedia.org/wiki/Ones%27_complement在二进制数的基础上操作取反i=0xFFFFFFF1=1111 1111 1111 1111 1111 1111 1111 0001
    对i取反
    ~i=0000 0000 0000 0000 0000 0000 0000 1110=14
      

  2.   

    十六进制:它们由以0x或者0X开头
    JAVA语言中的每条可执行语句最终都将被转换成二进制的机器指令package io;/**
     * 我的自己的机器是64bit的,但是我就按照32bit,大众口味。
     * 1111-1111-1111-1111-1111-1111-1111-0001
     * 0000-0000-0000-0000-0000-0000-0000-1110
     */
    public class TestStr {
        public static void main(String []args) {
            //十六进制转化为二进制
            int i = 0xFFFFFFF1;
            //~位运算中的非运算。也可以说是按位取反。
            //取反后会二进制是:0000-0000-0000-0000-0000-0000-0000-1110
            //
            int j=~i;
            System.out.println("j等于:" + j + "j二进制为:" + Integer.toBinaryString(j));
            System.out.println("i二进制为:" + Integer.toBinaryString(i));
            
            //如果取反后+1,值会不变。
            System.out.println("i的原始值: " + ~i + 1);
            
        }
        }
      

  3.   

    console:j等于:14j二进制为:1110
    i二进制为:11111111111111111111111111110001
    i的原始值: 141