A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄少海 于 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

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

13 个回复

倒序浏览
int m = -n
完事了
回复 使用道具 举报
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   这显然不对
回复 使用道具 举报
  1. int m = -10;
  2. System.out.print(~(m-1));
  3. 这样才对嘛,先减一再取反
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
  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.          }
复制代码
这样也行

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
如果问出现这种状况的原因,应该是因为负数是以补码的形式存储的。
如果是要得到绝对值的效果,楼上的办法都很不错。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报

你这个是不是写错了,n它是负数啊,负数的二进制表现形式其是,正数的二进制取反+1(反过来,负数的二进制-1取反可求正数)
回复 使用道具 举报
杨晓燕 发表于 2013-7-2 17:56
你这个是不是写错了,n它是负数啊,负数的二进制表现形式其是,正数的二进制取反+1(反过来,负数的二进 ...

这个方法是书上的。我自己运行了一遍不对。难道是书本上代码写错了
回复 使用道具 举报
黄少海 发表于 2013-7-2 18:01
这个方法是书上的。我自己运行了一遍不对。难道是书本上代码写错了

书上是没错的,童鞋,你抄错了 int m = n%0x7fffffff;
你看是不是把“%”写成了“&”

评分

参与人数 1黑马币 +5 收起 理由
赵海洋 + 5 好专业啊~!

查看全部评分

回复 使用道具 举报
杨晓燕 发表于 2013-7-2 18:49
书上是没错的,童鞋,你抄错了 int m = n%0x7fffffff;
你看是不是把“%”写成了“&” ...

绝对没有看错就是与。
回复 使用道具 举报
黄少海 发表于 2013-7-2 19:17
绝对没有看错就是与。

那可能是书上写错了把,不过你把它写成%结果就对了
回复 使用道具 举报

楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
回复 使用道具 举报
杨晓燕 发表于 2013-7-2 17:56
你这个是不是写错了,n它是负数啊,负数的二进制表现形式其是,正数的二进制取反+1(反过来,负数的二进 ...

你可以试试不就知道了吗,上面有代码直接复制粘贴到编程工具里运行就可以。行动最重要
回复 使用道具 举报
负数转化为二进制并不是只有三十二位中的首字母为1,具体请参阅二进制转化教程。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马