java的按位取反"~"运算符号是怎么计算的
int整数~12计算后是-13.这个是MYECLIPSE计算结果.看了下安位取反的原理就是将整数转为2进制,然后按每个位置如果是"1"就取"0",如果是"0"就取"1"....
int整数~12计算后是-13.这个是MYECLIPSE计算结果.看了下安位取反的原理就是将整数转为2进制,然后按每个位置如果是"1"就取"0",如果是"0"就取"1".那么按我的理解,首先先把12转换为二进制,也就是1100.然后安位取反几0011.那么我计算出来的结果是3.我知道我理解错了,可是不知道为什么.还有二进制怎么表达负数.有人说"11111111 11111111 11111111 11111111"等于-1.可是这个数我是不是也可以理解为普通二进制度转为十进制度的8589934591.到底要怎么理解安位取反呢,我一直不理解.象"按位与"和"按位或"都相对好理解.就卡这个了,请高手详细解释下.
展开
2个回答
展开全部
得看你的数据类型了,比如说你写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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询