社区
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,麻烦讲清楚点
...全文
149
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
中
的
移位
操作符
用于对二进制数进行左移()、右移(>>)和无符号右移(>>>)操作。 左移()
操作符
:将一个数的所有位向左移动指定的位数,右侧空出的位用0填充。 右移(>>)
操作符
:将一个数的所有位向右移动...
详解
Java
的位
操作符
位操作就是对这些数据进行基本的操作。如果基本类型是char、byte或者short类型的数值进行
移位
处理,那么会转化成int类型,再进行
移位
的处理
Java
移位
操作符
讲解
Java
移位
操作符
分为三种:左
移位
操作符
(<<)、有符号右
移位
操作符
(>>)、无符号右
移位
操作符
(>>>) 1、如果对char、byte、short类型的数值进行
移位
操作,那么在
移位
之前,它们会被转换为int类型...
Java
移位
操作符
移位
操作符
在以前的开发
中
并没有使用过,估计在日常的开发
中
也很少会用到,所以记录下来,以后需要的时候方便查阅。 基本概念
Java
里面的
移位
操作符
总共有以下三种: 左移
操作符
&amp;amp;...
java
中
移位
操作符
的使用
在
java
中
,
移位
操作符
只可用来处理整数类型.左
移位
操作符
()则按照
操作符
右侧指定的位数将
操作符
左边的操作数向右移动。“有符号”右
移位
操作符
使用“符号扩展”:[color=red]若符号为正,则在高位插入0;若符号位...
Java SE
62,614
社区成员
307,318
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章