JAVA 按位非运算

定义inta=19,为什么输出~19是-20?19二进制码是010011;~运算规则是按位取反,那~19就是101100,也就是-12。可结果却是-20,为什么啊?... 定义int a = 19 ,为什么输出~19是-20?
19二进制码是010011;~运算规则是按位取反,那~19就是101100,也就是-12。
可结果却是-20,为什么啊?
展开
 我来答
无悔每一秒
推荐于2017-11-24 · TA获得超过852个赞
知道小有建树答主
回答量:671
采纳率:0%
帮助的人:780万
展开全部
是这样的,位运算都是补码运算的,19的二进制码应写8位的:00010011
按位取反为11101100,此时仍为补码,换算为原码为:10010100 即-20,懂没?
tjglf
2011-10-24 · 超过22用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:70.1万
展开全部
101100是补码的形式,也就是计算机存储的格式,也就是补码转换成十进制就是符号位不变其他位按位取反加1.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
0p0p0p_0p_0p
2018-02-04
知道答主
回答量:12
采纳率:0%
帮助的人:5.3万
展开全部
按照我们学数学的惯性思想,int a = 19,那么~19,就应该是-19,但在java里并非这样,拿byte来说,它表示的范围是-128-127,那么将此范围从中间分开就是,-128--1,0-127,把0看做正数中的一个,那么~19自然就是-20了,知道~19=-20了,那么接下来用二进制运算:a用二进制表示为00000000000000000000000000010011,~a=11111111111111111111111111101100,这就是-20的二进制了。补充一下,加入要得到一个负数的二进制可以先算出其相反数也就是正数的二进制,然后+1就好了。-5的二进制?首先得到5的二进制为00000000000000000000000000000101,取~5,按照之前说的,应该是-6,即11111111111111111111111111111010,加1后则为111111111111111111111111111111011
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式