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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈志伟 中级黑马   /  2012-4-8 16:11  /  1652 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test {
  public static void main(String[] args) {
  System.out.println("~2="+~2);
  System.out.println("~-2="+~-2);
}
}
这两个运算结果是-3,1,但不明白具体是怎么得到的!

3 个回复

倒序浏览
本帖最后由 贠(yun)靖 于 2012-4-8 16:32 编辑

2     0000 。。。。 0010
~2    1111 。。。。 1101   得到反码  是一个负数 要转正补码
取反  1000 。。。。 0010              补码:整数的补码与整数相同,负数的补码是把负数的绝对值取反再加1
加1   1000 。。。。 0011  所以-3

-2    1111 。。。。1110   算出补码
~2   0000。。。。 0001  1  是个正数  整数的补码就是该正数  不用转了  
  数字在计算机中的体现都是以补码的形式体现的    所以在做运算 时 要先转成补码  
回复 使用道具 举报
~2 对2进行取反,我们都知道在java中负数二进制的表现形式是正数取反加1对2进行取反再加1是-2所以直接对2取反是-3.如果你不明白,你将2转换为2进制是0000 0010 取反就是1111 1101我们知道这是一个负数,那么它是谁的负数呢?我们先将1111 1101减去一个1得到的是1111 1100.然后再取反是 0000 0011 转成十进制是3所以1111 1101是-3.哎  ,这么讲不知道你懂了么。
回复 使用道具 举报
 楼主的帖子实在是写得太好了。文笔流畅,修辞得体,深得魏晋诸朝遗风,更将唐风宋骨发扬得入木三分,能在有生之年看见楼主的这个帖子。实在是我三生之幸啊。看完楼主的这个帖子之后,我竟感发生出一种无以名之的悲痛感??啊,这么好的帖子,如果将来我再也看不到了,那我该怎么办?那我该怎么办?直到我毫不犹豫的把楼主的这个帖子收藏了。我内心的那种激动才逐渐平复下来。可是我立刻想到,这么好的帖子,倘若别人看不到,那么不是浪费楼主的心血吗?经过痛苦的思想斗争,我终于下定决心,我要把这个帖子一直往上顶,往上顶!顶到所有人都看到为止。  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马