JAVA中为何~1等于-2,~0等于-1呢????不懂这是为什么。

pop3696 2007-02-26 10:42:53
刚学,不懂
...全文
给本帖投票
1627 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pop3696 2007-02-27
  • 打赏
  • 举报
回复
to coldwindtang(风)

谢谢
唐巧 2007-02-26
  • 打赏
  • 举报
回复 2
这个问题涉及到计算机内部的编码。
对于整数,计算机内部用最高位表示符号位,0表示为正,1表示为负。
对于负数,为了便于计算,计算机用补码来表示其值。
已经一个数的补码,要知道其值分两种情况:
1:符号位是0,正数,所以后面的二进制位则表示大小,即正数的原码=其补码。如1表示出来则为00000001(我这里用八位来表示,也可以用16位或32位)
2:符号位是1,负数,这时候需要把后面的数取反再加一(要问为什么?查一下资料吧,可以根据补码的特性推出来),所以11111110表示的数是1111110取反为0000001,再加一,则为0000002。算上符号位,就是-2。

再让我们回到楼主的问题。
1的二进制表示为:00000001,则~1为11111110,根据补码的转换方法,我们就可以算出11111110表示的数是-2.
同理:~0 = -1

Gekkou 2007-02-26
  • 打赏
  • 举报
回复
以int型为例:
~1 = 11111111 11111111 11111111 11111110 = -2
~0 = 11111111 11111111 11111111 11111111 = -1
lixiaoxue85 2007-02-26
  • 打赏
  • 举报
回复
LZ把代码贴出来 取非,结果只有0和1吧 着么可能出来-2,LZ看错了?
expter 2007-02-26
  • 打赏
  • 举报
回复
没懂你什么意思
pop3696 2007-02-26
  • 打赏
  • 举报
回复
说错,是非操作(~),~1因该是0啊怎么是-2 ??
pop3696 2007-02-26
  • 打赏
  • 举报
回复
对1和0分别取反。
mingxuan3000 2007-02-26
  • 打赏
  • 举报
回复
不明白说什么

62,635

社区成员

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

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

手机看
关注公众号

关注公众号

客服 返回
顶部