JAVA 按位非运算
定义inta=19,为什么输出~19是-20?19二进制码是010011;~运算规则是按位取反,那~19就是101100,也就是-12。可结果却是-20,为什么啊?...
定义int a = 19 ,为什么输出~19是-20?
19二进制码是010011;~运算规则是按位取反,那~19就是101100,也就是-12。
可结果却是-20,为什么啊? 展开
19二进制码是010011;~运算规则是按位取反,那~19就是101100,也就是-12。
可结果却是-20,为什么啊? 展开
3个回答
展开全部
101100是补码的形式,也就是计算机存储的格式,也就是补码转换成十进制就是符号位不变其他位按位取反加1.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按照我们学数学的惯性思想,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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询