社区
Java SE
帖子详情
Java中移位操作符问题!关于~的
原来缘来
2011-03-26 10:57:40
public class Sample {
public static void main(String[] args) {
int a=4;
System.out.println(~a);
}
}
求高手解释一下,为什么输出-5,麻烦讲清楚点
...全文
206
7
打赏
收藏
Java中移位操作符问题!关于~的
public class Sample { public static void main(String[] args) { int a=4; System.out.println(~a); } } 求高手解释一下,为什么输出-5,麻烦讲清楚点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tongxingzhen123
2011-03-27
打赏
举报
回复
楼上正解
Ganymede
2011-03-27
打赏
举报
回复
(~a);是逐位取反的意思。int是4位 ,a的值为4,所以他的二进制为00000000 00000000 00000000 00000100
取反是11111111 11111111 11111111 11111011 最高位为符号位,1为负 0为正,而负数的表示为他的补码,转换为十进制为 除了符号位不变,其余取反加1 也就是10000000 00000000 00000000 00000101 结果就是-5啦
zqfddqr
2011-03-27
打赏
举报
回复
2楼正解
Ganymede
2011-03-27
打赏
举报
回复
我上面可能解释的不是很详细。下面详细说下,相信以后楼主一定对这种题颇有心得了。呵呵
在二进制的世界里,负数是以补码的形式存放在内存中的,而正数就是以原码的形式存放的,所以下面我只解释下补码的计算,
补码=反码+1
。所谓的反码就是 将负数的原码除最高位不变(也就是符号位,为1时,表示负,为0时,表示正。下面红色标识)以外的其他位都按位取反。(下面还是以-5为例子)
-5原码:
1
0000000 00000000 00000000 00000101。那么-5的反码相应就是:
1
11111111 11111111 11111111 11111010
这时求负数的补码就用反码加1了。也就是负数的最终保存形式:11111111 11111111 11111111 11111011
那么针对楼主说的,int i=-5;也就是将11111111 11111111 11111111 11111011按位取反了,所以结果是:
00000000 00000000 00000000 00000100。所以System.out.println(~i);输出的是4。
Ganymede
2011-03-27
打赏
举报
回复
最高位就是二进制数从左边数第一个,也就是符号位。
这是-5的原码
:10000000 00000000 00000000 00000101,但是负数的二进制在计算机里是以补码的形式存放的。
这是-5的补码
:11111111 11111111 11111111 11111011,这也是-5在内存里存储的最终形式。
然后是按位取反
,结果是:00000000 00000000 00000000 00000100 就是十进制的4
原来缘来
2011-03-27
打赏
举报
回复
[Quote=引用 2 楼 followme_1987 的回复:]
(~a);是逐位取反的意思。int是4位 ,a的值为4,所以他的二进制为00000000 00000000 00000000 00000100
取反是11111111 11111111 11111111 11111011 最高位为符号位,1为负 0为正,而负数的表示为他的补码,转换为十进制为 除了符号位不变,其余取反加1 也就是10000000 00000000 00000000 0000010……
[/Quote]
二楼的最高位指的那位?顺手牵羊解释一下
int i=-5;
System.out.println(~i);
为什么输出4
qybao
2011-03-26
打赏
举报
回复
二进制运算
自己用二进制的方式取反后看看是什么结果就知道了
一文彻底弄懂
Java
的
移位
操作符
本文深入解析
Java
中
的
移位
操作符
,包括左移、带符号右移和无符号右移,探讨它们在不同类型上的应用及特殊场景下的行为,如
移位
位数超出范围的情况。
java
中
的
移位
操作符
本文深入探讨了
Java
中
的
移位
操作符
,包括有符号左移、有符号右移和无符号右移。通过实例展示了这些
操作符
如何改变整数的二进制表示,并解释了在进行
移位
操作时,
移位
数的特殊处理方式。
Java
移位
操作符
及其对char、byte、short类型数值的处理
本文详细解析了
Java
中
二进制的表示方法、正负数定义及其最大最小值,深入探讨了
移位
操作符
的工作原理,包括左
移位
、有符号右
移位
与无符号右
移位
,并通过实例解释了
移位
操作
中
的疑难
问题
。
Java
移位
操作符
使用初探
本文介绍了
Java
中
的三种
移位
操作符
:左移、右移及无符号右移,并通过实例展示了在处理byte和short类型时可能出现的
问题
。
java
负数转正数_彻底弄懂
Java
的
移位
操作符
本文详细介绍了
Java
中
的
移位
操作符
,包括左移
操作符
<<,带符号右移
操作符
>>和无符号右移
操作符
>>>。重点讨论了负数在
移位
操作
中
的处理方式,以及对于short、byte、char类型
移位
时的转换规则。通过实例解析了
移位
超出门限情况的行为,并指出在JDK源码
中
移位
操作符
的常见用途和效率优势。
Java SE
62,621
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章