首页 > 试题广场 >

下面代码输出结果是?

[单选题]
下面代码输出结果是?
int i = 5;
int j = 10;
System.out.println(i + ~j);

  • Compilation error because”~”doesn’t operate on integers
  • -5
  • -6
  • 15
lz头像 lz

公式-n=~n+1可推出~n=-n-1,所以~10=-11再加5结果为-6

发表于 2015-08-03 22:00:48 回复(94)
我认为应该是:
计算机本身储存的就是补码:
那么10的补码就是10的原码:0000 0000 0000 1010——这是补码,因为现在是计算机在计算
~10的补码就是:1111 1111 1111 0101
~10的反码就是:1111 1111 1111 0100——补码减1
~10的原码就是:1000 0000 0000 1011——反码取反:这个才是正常二进制数,换算为整数为-11
原码才可以对应为正常的整数,补码只有转换为原码才能被正常人类识别。
编辑于 2016-07-27 20:56:58 回复(25)
答案:C
10原码:0000000000000000,0000000000001010;
~10: 1111111111111111,1111111111110101  变为负数,计算机用补码存储
~10反码:10000000000000000,0000000000001010
~10补码:10000000000000000,0000000000001011,等于 -11
故程序结果-6
编辑于 2021-07-16 10:02:52 回复(17)
有个公式,-n=~n+1
发表于 2015-09-12 21:18:28 回复(9)
计算机中以补码存储。
正数的原码/反码/补码相同,所以
10存储为00000000 00000000 00000000 00001010  
~10的原码为11111111 11111111 11111111 11110101(10取反)
~10的反码为10000000 00000000 00000000 00001010(最高位符号位,不变,其余位取反)
~10的补码为10000000 00000000 00000000 00001011(负数的补码=反码+1)
所以~10 = -11
发表于 2015-07-26 11:13:55 回复(4)
~代表按位取反
发表于 2016-02-09 10:50:51 回复(0)
首先要明白“~”是一个按位运算符,~j 表示 对 j 按位取反,这是对二进制的操作,那么~j 在计算机内存中的存储运算是 1111 1111 1111 1111 1111 1111 1111 0101 形式,而计算机中存储是补码的形式。所以可以理解为某个数的补码是1111 1111 1111 1111 1111 1111 1111 0101,问题转化为知道补码怎样求原码。我们知道正数的补码是自身,负数的补码等于其对应的正数的反码加一。那么倒过来算,如下:
11111 1111 1111 1111 1111 1111 0101 减1   得到 反码11111 1111 1111 1111 1111 1111 0100 
反码按位取反,保留符号位,得到 1000 0000 0000 0000 0000 0000 0000 1011  由此说明 ~10在计算中存储的是 -11的补码,所以计算结果是 5+(-11)=-6 
发表于 2018-07-16 10:02:13 回复(3)
负数的补码 = 原码取反 + 1,即:
-n = ~n + 1      →    ~n = -n -1     
~j:~10 =  - 10 - 1 = -11
i + j = 5 + -11 = -6 
 

发表于 2016-08-24 01:53:26 回复(0)
我是这样想的,计算机是用补码进行存储和计算的,所以当10进行按位取反操作后,存入计算机的就是计算机能够直接进行计算的补码。
所以:
10原码:0000 0000 0000 0000, 0000 0000 0000 1010
~10:1111 1111 1111 1111, 1111 1111 1111 0101 这个就已经是补码了,能够直接进行加运算
5补码:0000 0000 0000 0000, 0000 0000 0000 0101
相加:1111 1111 1111 1111, 1111 1111 1111 1010 这是计算后的补码结果
转换为原码:1000 0000 0000 0000, 0000 0000 0000 0110 结果是-6
发表于 2016-07-15 10:22:02 回复(2)
取反公式:-(i+1)
发表于 2016-10-14 20:17:04 回复(0)
数在计算机中是以补码形式存在的。数>0,补码==反码;数<0,补码==反码+1.(注意符号位)
如:10原码:(000...0)0000  1010(最高位代表符号位)
       ~10原码:(00...0)1111   0101(全部取反)
        ~10反码:(00..0)1000  1010(反码符号位不变)
      ~10补码:                  1000   1011(-11)
发表于 2016-06-21 22:21:46 回复(0)
计算机中以补码存储。 正数的原码/反码/补码相同,所以 10存储为00000000 00000000 00000000 00001010   ~10的原码为11111111 11111111 11111111 11110101(10取反) ~10的反码为10000000 00000000 00000000 00001010(最高位符号位,不变,其余位取反) ~10的补码为10000000 00000000 00000000 00001011(负数的补码=反码+1) 所以~10 = -11
发表于 2016-04-20 23:10:14 回复(0)
首先写出10的原码:一共32位,为了省地方,写后八位
10的原码:00001010
10的反码:11110101(最高位为1,代表这是个负数,是负多少呢)
10的反码+1:11111011 = -11
所以答案为5-11=-6

                                                        
编辑于 2015-04-16 17:00:56 回复(0)
我觉得他们说反了,10是正数,用补码存在内存里面,为0000000000000000,0000000000001010
取反后变成 1111111111111111,1111111111110101,现在内存里面存的是这个
由于计算机存的是补码,为便于计算可以转成原码
1111111111111111,1111111111110101 (补码)-》 10000000000000000,0000000000001011(原码)
原码和原码计算,也就是-11+5 = -6
发表于 2017-06-05 11:40:46 回复(0)
发表于 2021-12-11 09:30:56 回复(0)
发表于 2019-11-09 08:48:23 回复(1)
~n=-n-1
发表于 2022-06-11 18:20:34 回复(0)
~是按位取反运算符,10的二进制为0000----1010,取反后为1111----0101,是一个负数。
首先你需要知道正数和负数的转化都是取反+1,例如4和-4,4二进制为000----0100,取反加一为111----1100,即为-4的二进制,反过来也如此,但是一般知道负数的二进制很难直接得出这个负数,所以可以通过取反加一先获得正数,然后加个负号就是负数了。例如上面的1111----0101,取反加一为0000----1011,为11,所以结果为-11
发表于 2022-05-31 09:28:13 回复(0)
编程不需要视力
发表于 2022-05-30 07:26:32 回复(0)
解析是错的。。。
发表于 2022-04-20 13:10:00 回复(0)