求JAVA里面的一个小问题
为什么~6的结果是-7啊?0000-0110取反不是1111-1001吗?本人初学java,请高手解答下。...
为什么~6的结果是-7啊? 0000-0110取反不是1111-1001吗? 本人初学java,请高手解答下。
展开
3个回答
展开全部
0000-0110取反是1111-1001
1111-1001:第一位保持不变,取反:
1000-0110
加一
1000-0111
需要注意的是负数的原码->补码:原码(负数的绝对值的源码)取反加一;补码->源码:补码第一位保持不变,取反加一;注意都是加一,不是什么相反规则,源码转补码是取反加一,那么补码转源码就是取反减1,谢谢了,原来我就是这样认为的
完整写法:
6是0000 0000 0000 0110
取反:1111 1111 1111 1001
由于第一位是1,补码转原码,第一位保持不变,取反加1:
1000 0000 0000 0111
补码和原码的转化过程
在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 补码与原码的转换过程几乎是相同的。 数值的补码表示也分两种情况: (1)正数的补码:与原码相同。 例如,+9的补码是00001001。 (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码 0000111按位取反为1111000;再加1,所以-7的补码是11111001。 已知一个数的补码,求原码的操作分两种情况: (1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。 (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。 例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为 “1”;其余7位1111001取反后为0000110;再加1,所以是10000111。
1111-1001:第一位保持不变,取反:
1000-0110
加一
1000-0111
需要注意的是负数的原码->补码:原码(负数的绝对值的源码)取反加一;补码->源码:补码第一位保持不变,取反加一;注意都是加一,不是什么相反规则,源码转补码是取反加一,那么补码转源码就是取反减1,谢谢了,原来我就是这样认为的
完整写法:
6是0000 0000 0000 0110
取反:1111 1111 1111 1001
由于第一位是1,补码转原码,第一位保持不变,取反加1:
1000 0000 0000 0111
补码和原码的转化过程
在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 补码与原码的转换过程几乎是相同的。 数值的补码表示也分两种情况: (1)正数的补码:与原码相同。 例如,+9的补码是00001001。 (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码 0000111按位取反为1111000;再加1,所以-7的补码是11111001。 已知一个数的补码,求原码的操作分两种情况: (1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。 (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。 例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为 “1”;其余7位1111001取反后为0000110;再加1,所以是10000111。
展开全部
class Test
{
public static void main(String[] args)
{
/*
是对存于计算机的补码进行操作的。
6是正数,补码与其源码相同。为:0(符号位)...0000110(因为默认是int型所以32位)
对其~操作后为:1(符号位)...1111001
显霸气编程源码:取反加1(除去符号位)
1) 1(符号位)...0000110
2) 1(符号位)...0000111
所以最后是-7
*/
System.out.println(~6);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java的int型是32位的,6也就是0000 0000 0000 0110
取反就是-7了
取反就是-7了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询