黑马程序员技术交流社区
标题:
二进制问题
[打印本页]
作者:
陈志伟
时间:
2012-4-8 16:11
标题:
二进制问题
public class Test {
public static void main(String[] args) {
System.out.println("~2="+~2);
System.out.println("~-2="+~-2);
}
}
这两个运算结果是-3,1,但不明白具体是怎么得到的!
作者:
贠(yun)靖
时间:
2012-4-8 16:26
本帖最后由 贠(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 是个正数 整数的补码就是该正数 不用转了
数字在计算机中的体现都是以补码的形式体现的 所以在做运算 时 要先转成补码
作者:
黑马老兵
时间:
2012-4-8 16:27
~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.哎 ,这么讲不知道你懂了么。
作者:
pray
时间:
2014-4-26 05:55
楼主的帖子实在是写得太好了。文笔流畅,修辞得体,深得魏晋诸朝遗风,更将唐风宋骨发扬得入木三分,能在有生之年看见楼主的这个帖子。实在是我三生之幸啊。看完楼主的这个帖子之后,我竟感发生出一种无以名之的悲痛感??啊,这么好的帖子,如果将来我再也看不到了,那我该怎么办?那我该怎么办?直到我毫不犹豫的把楼主的这个帖子收藏了。我内心的那种激动才逐渐平复下来。可是我立刻想到,这么好的帖子,倘若别人看不到,那么不是浪费楼主的心血吗?经过痛苦的思想斗争,我终于下定决心,我要把这个帖子一直往上顶,往上顶!顶到所有人都看到为止。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2