java的按位取反"~"运算符号是怎么计算的

int整数~12计算后是-13.这个是MYECLIPSE计算结果.看了下安位取反的原理就是将整数转为2进制,然后按每个位置如果是"1"就取"0",如果是"0"就取"1".那么按我的理解,首先先把12转换为二进制,也就是1100.然后安位取反几0011.那么我计算出来的结果是3.我知道我理解错了,可是不知道为什么.还有二进制怎么表达负数.有人说"11111111 11111111 11111111 11111111"等于-1.可是这个数我是不是也可以理解为普通二进制度转为十进制度的8589934591.到底要怎么理解安位取反呢,我一直不理解.象"按位与"和"按位或"都相对好理解.就卡这个了,请高手详细解释下.

得看你的数据类型了,比如说你写12,默认的就是int的12
int是32位的
12=00000000 00000000 00000000 00001100
~12=11111111 11111111 11111111 11110011

第二个问题,有符号整数是按照最高位判断正负的(java中的数值除了char都是有符号的,都符合这个规则),如果x最高位是1,那么该数是负数,其值为 -((~x)+1),因此
11111111 11111111 11111111 11111111作为int型的话,因为最高位为1,所以其值为 -(0+1)=-1

根据上面的理论,~12=-(~(~12)+1)=-13
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-30
二进制表示负数是有符号位才能表示的,就是第一位为1就是负数,此位为符号位.
取反就是原来1的就为0,原来0的就为1,所以有符号取反正会取成负,负会取成正
相似回答