黑马程序员技术交流社区

标题: 为什么负整数转化为正数出问题了??? [打印本页]

作者: 黄少海    时间: 2013-7-2 16:27
标题: 为什么负整数转化为正数出问题了???
本帖最后由 黄少海 于 2013-7-2 21:39 编辑

如下代码正整数可以正常转化成正数,负整数不行,求解。
  1. public class fdfdfdf {
  2.         public static void main(String[] args){
  3.                 int n= -10; //      
  4.                 System.out.println("n="+n);
  5.                 int m = n & 0x7fffffff;//把整数n转化成正数m
  6.                 System.out.println("m="+m);
  7.         }
  8. }
复制代码

负整数转化成正数.jpg (9.16 KB, 下载次数: 0)

负整数转化成正数.jpg

正整数转正数没问题.png (780 Bytes, 下载次数: 0)

正整数转正数没问题.png

作者: denghui1010    时间: 2013-7-2 16:38
int m = -n
完事了
作者: denghui1010    时间: 2013-7-2 16:46
1111 1111 1111 1111 1111 1111 1111 0110   这是-10
0111 1111 1111 1111 1111 1111 1111 1111   这是0x7fffffff
0111 1111 1111 1111 1111 1111 1111 0110   这显然不对
作者: denghui1010    时间: 2013-7-2 16:51
  1. int m = -10;
  2. System.out.print(~(m-1));
  3. 这样才对嘛,先减一再取反
复制代码

作者: 王广亚    时间: 2013-7-2 16:52
  1. public class fdfdfdf {         
  2.         public static void main(String[] args){         
  3.                 int n= -10;            
  4.                 System.out.println("n="+n);               
  5.                          int m = ~n+1;//把整数n转化成正数m:取反加1;
  6.                 System.out.println("m="+m);
  7.                  }
  8.          }
复制代码
这样也行
作者: 宋智超    时间: 2013-7-2 17:25
如果问出现这种状况的原因,应该是因为负数是以补码的形式存储的。
如果是要得到绝对值的效果,楼上的办法都很不错。
作者: 杨晓燕    时间: 2013-7-2 17:56
王广亚 发表于 2013-7-2 16:52
这样也行

你这个是不是写错了,n它是负数啊,负数的二进制表现形式其是,正数的二进制取反+1(反过来,负数的二进制-1取反可求正数)

作者: 黄少海    时间: 2013-7-2 18:01
杨晓燕 发表于 2013-7-2 17:56
你这个是不是写错了,n它是负数啊,负数的二进制表现形式其是,正数的二进制取反+1(反过来,负数的二进 ...

这个方法是书上的。我自己运行了一遍不对。难道是书本上代码写错了
作者: 杨晓燕    时间: 2013-7-2 18:49
黄少海 发表于 2013-7-2 18:01
这个方法是书上的。我自己运行了一遍不对。难道是书本上代码写错了

书上是没错的,童鞋,你抄错了 int m = n%0x7fffffff;
你看是不是把“%”写成了“&”
作者: 黄少海    时间: 2013-7-2 19:17
杨晓燕 发表于 2013-7-2 18:49
书上是没错的,童鞋,你抄错了 int m = n%0x7fffffff;
你看是不是把“%”写成了“&” ...

绝对没有看错就是与。
作者: 杨晓燕    时间: 2013-7-2 19:24
黄少海 发表于 2013-7-2 19:17
绝对没有看错就是与。

那可能是书上写错了把,不过你把它写成%结果就对了
作者: 杜光    时间: 2013-7-2 21:33

楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
作者: 王广亚    时间: 2013-7-2 23:53
杨晓燕 发表于 2013-7-2 17:56
你这个是不是写错了,n它是负数啊,负数的二进制表现形式其是,正数的二进制取反+1(反过来,负数的二进 ...

你可以试试不就知道了吗,上面有代码直接复制粘贴到编程工具里运行就可以。行动最重要
作者: 草帽    时间: 2013-7-3 00:28
负数转化为二进制并不是只有三十二位中的首字母为1,具体请参阅二进制转化教程。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2