Java按位取反?~2为什么是-3呢?

人工智能-张晨光
优质创作者: 前端开发技术领域
领域专家: 后端开发技术领域
2008-02-27 04:44:45
rt

class Test
{
public static void main(String[]args)
{
System.out.println(6.34%4);
System.out.println(6.34%4.2);
System.out.println(~2);
char c1='aaa';
System.out.println(c1);
}
}
...全文
1623 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
月影飞烟 2010-05-20
  • 打赏
  • 举报
回复
2 的原码 0000 0010
~2 按位取反 1111 1101
由于计算机内的数据是以补码的形式存储的
所以系统认为1111 1101是按补码存储的数据,将它还原成十进制的值
也就是负数的补码取反+1,得到
1000 0011 也就是 -3
一天十小时 2008-12-05
  • 打赏
  • 举报
回复
学习了~~~~~~~~~
fg8181 2008-04-02
  • 打赏
  • 举报
回复
这样理解:2=0000 0010

按位取反后:1111 1101------->此时表示为负数,因为最高位为1

然后转化为:1000 0010

然后再加1就变为:1000 0011---->此时表示的数为-3

------->二进制的负数转化为十进制的时候规则为:除符号位外取反,然后加1!
Y382904800 2008-02-27
  • 打赏
  • 举报
回复
同意楼上的解释
枫叶rain 2008-02-27
  • 打赏
  • 举报
回复
2的表示是00000010
按位取反后是11111101
再转换成原码是10000011
结果就是-3了
  • 打赏
  • 举报
回复
我想二楼的答案是还原了一下负数的原码是什么对吗?
insiku 2008-02-27
  • 打赏
  • 举报
回复
你知道原码补码反码是什么?????
  • 打赏
  • 举报
回复
难道经过取反为负数还得取反一次吗?
liang8305 2008-02-27
  • 打赏
  • 举报
回复
2 => 0000 0010
~0010 => 1111 1101,符号为-
1111 1101-1 => 1111 1100
~1111 1100 => 0000 0011
0000 0011 => 3

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧