例如一个负的长整型-1234567890, 如何能转换成正的长整型?(给C++模块用),移位?

解决方案 »

  1.   

    举个例子:
    -1984060040 , 我希望把它转成无符号整数,
    那么1984060040的二进制是01110110010000100101101010001000(最高位为符号位),
    根据负数转正数的方法是  求其补码,
    那么01110110010000100101101010001000的反码是10001001101111011010010101110111,
    补码是反码+1,即10001001101111011010010101111000,
    这个数的十进制就是2310907256,
    我就是想知道在JAVA里怎么能得到这个正数,
    ~-1984060040取反不会带上符号位,请问怎么能将符号位也给带上?
      

  2.   

    你是要反转缺不改符号位么
    那就用 &  |  ^ 这3个都可以~
      

  3.   

    如果你那数字是动态的那就很难了
    直接向右移1位 记得用>>  这也是个办法
    但是如果是动态数字 你就要想个算法出来了
      

  4.   

    经测试,
    long lSrc = -1984060040;                     
    System.out.println(Long.toString(lSrc, 2));//-1110110010000100101101010001000long lAbsoluteValue = Math.abs(lSrc);
    System.out.println(Long.toString(lAbsoluteValue, 2));//1110110010000100101101010001000long lDst = ~lAbsoluteValue;
    System.out.println(Long.toString(lDst , 2));//-1110110010000100101101010001001
    System.out.println(Long.toString(Math.abs(lDst) , 2));//1110110010000100101101010001001崩溃,咋能把1110110010000100101101010001000取反变成0001001101111011010010101110111啊?
    来个正则表达式也成,我直接用字符串拼起转成Long算了~~~