首页 > 试题广场 >

执行"int x=1;int y=~x;"语句后,y的值为?

[单选题]
执行"int x=1;int y=~x;"语句后,y的值为?
  • 1
  • 0
  • -1
  • -2
推荐
D
运算对象是数字的补码而非原始二进制,用16进制表示的话,1的真值是0000 0001
它的补码也是0000 0001,那么它的取反之后为ffff fffe,这个也就是y的补码
那么现在就求y的真值,再取反加1,为8000 0002,所以为-2,闻波大神证~
编辑于 2015-12-07 11:21:54 回复(8)
假设int占2个字节,那么1的二进制表示是 0000 0001 ,~表示按位取反,则 0000 0001变为 1111 1110,在计算机中整数用补码形式表示,正数的补码是它本身,负数的补码是原数值除符号位按位取反再加一,由补码求原数值也是按位取反再加一,那么 1111 1110 除符号位按位取反再加一变成 1000 0010,即 -2。
编辑于 2015-12-16 15:46:03 回复(13)

x = 00000001

~x = 11111110,~x为负数,负数在计算机中用补码表示,所以符号位不变,取反加1

y = 100000010

发表于 2016-08-15 09:36:50 回复(5)
天呐,选择题而已,不用这么麻烦吧,直接根据公式:int n;~n=-(n+1);
发表于 2017-08-20 09:32:28 回复(2)
运算对象为数字的补码,而不是二进制码。当补码的符号位为1时,说明该补码对应的是负数,所以根据补码求原码的时候遵循负数的原则,补码取反加一。如果符号位为0时,则该补码对应的原码与其相同。
-3:
1000 0011 (原码)
1111 1100 (反码)
1111 1101 (补码)(这是-3在计算机中的表示形式)
~(-3):
0000 0010 (补码)(~(-3)在计算机中的表示形式)
所以~(-3)=4

1:
0000 0001 (原码,反码,补码)
~1:
1111 1110 (补码)(~1在计算机中的表示形式)
1000 0010 (原码)
~1=-2


编辑于 2016-09-02 21:37:46 回复(4)
负数求补码是取反再加1,我还以为由补码到源码就是减1再取反呢,哈哈,其实和取反加1是一样的结果。
即“ 负数的补码是原数值除符号位按位取反再加一,由补码求原数值也是按位取反再加一:
发表于 2016-07-15 08:10:12 回复(0)
在计算机中数值是以补码的形式存储的。所以int x=1中x的值为1的补码,即:0000 0001
在y=~x中,~是按位求反的意思,所以对x进行按位取反即:1111 1110
同理,数值是以补码的形式存储的,所以要把1111 1110转换为其补码形式:
第一位1为符号位,表示改数值为负,所以按照负数的求补码规则,除符号位以外按位取反再加1,即
1000 0001->1000 0010 ,即最终结果为-2。
编辑于 2017-04-26 16:55:57 回复(0)
假设int占2个字节,那么1的二进制表示是 0000 0001 ,~表示按位取反,则 0000 0001变为 1111 1110,在计算机中整数用补码形式表示,正数的补码是它本身, 负数的补码是原数值除符号位按位取反再加一,由补码求原数值也是按位取反再加一,那么 1111 1110   除符号位    按位取反再加一变成 1000 0010,即 -2。
发表于 2016-03-25 15:06:01 回复(1)
~n=-n-1=-1-1=-2
发表于 2016-08-28 13:24:27 回复(1)

➕1再✖️-1,想这么多干啥玩意儿

发表于 2019-11-14 20:24:08 回复(0)
int 占4个字节,1在计算机中二进制表示为00000000 00000000 00000000 00000001
~x表示按位取反,得到11111111 11111111 11111111 11111111 11111110,在计算机中以补码的形式存放,符号位为1,说明是负数
源码就是10000000 00000000 00000000 00000010,所以是-2

发表于 2019-08-22 13:53:18 回复(0)
假设int占2个字节,那么1的二进制表示是 0000 0001 ,~表示按位取反,则 0000 0001变为 1111 1110,在计算机中整数用补码形式表示,正数的补码是它本身,负数的补码是原数值除符号位按位取反再加一,由补码求原数值也是按位取反再加一,那么 1111 1110 除符号位按位取反再加一变成 1000 0002,即 -2
发表于 2015-12-15 09:44:33 回复(2)
假设int占2个字节,那么1的二进制表示是 0000 0001 ,~表示按位取反,则 0000 0001变为 1111 1110,在计算机中整数用补码形式表示,正数的补码是它本身,负数的补码是原数值除符号位按位取反再加一,由补码求原数值也是按位取反再加一,那么 1111 1110 除符号位按位取反再加一变成 1000 0010,即 -2。
发表于 2018-11-28 16:53:22 回复(0)
int A,
A的十进制 + (~A)的十进制 = -1
比如,0取反为-1; -2取反为1

发表于 2017-03-31 20:12:39 回复(0)
计算系统中,数以其补码的形式存在,正数的补码就是它本身,负数是其反码+1。。。这样先对x=1求补码,是其本身,在根据y=~x求反码,得到y值,但是y在计算机存储中要按其补码,这样再把y取反+1,得到-2
发表于 2017-03-28 10:01:59 回复(0)
说明几点:
1.在计算机系统中,数值一律用补码来表示和存储;
2.补码与原码相互转换,其运算过程是相同的;
3. 对一个整数的补码再求补码,等于该整数自身;
4.正整数的补码是其二进制表示,与原码相同;
5.求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1;另外一种说法是将负数的补码除去符号位之外的所有位取反后加1。两种做法其实完全一样。

发表于 2016-08-15 12:27:12 回复(0)
运算对象是数字的补码而非原始二进制,用16进制表示的话,1的真值是0000 0001
它的补码也是0000 0001,那么它的取反之后为ffff fffe,这个也就是y的补码
那么现在就求y的真值,再取反加1,为8000 0002,所以为-2,
编辑于 2016-04-04 17:58:02 回复(0)
D,由于1的十六进制是00000001,按位取反,得11111110,首位代表符号位,所以为发,求补码,按位取反再加一,得10000010,得值为-2
发表于 2015-12-18 15:05:46 回复(0)
应为数据在内存中是以补码的形似存在 所以x(假设32位)在内存中为下x=0x00000001. 所以 取反x=0xfffffffe 及y = 0xfffffffe这个时候存的是补码,要转换为源码及y = 0x80000002 = -2
发表于 2022-12-19 10:57:07 回复(0)
运算对象为数字的补码,而不是二进制码。当补码的符号位为1时,说明该补码对应的是负数,所以根据补码求原码的时候遵循负数的原则,补码取反加一。如果符号位为0时,则该补码对应的原码与其相同。 -3: 1000 0011 (原码) 1111 1100 (反码) 1111 1101 (补码)(这是-3在计算机中的表示形式) ~(-3): 0000 0010 (补码)(~(-3)在计算机中的表示形式) 所以~(-3)=4 1: 0000 0001 (原码,反码,补码) ~1: 1111 1110 (补码)(~1在计算机中的表示形式) 1000 0010 (原码) ~1=-2
编辑于 2024-04-03 17:26:42 回复(0)
发表于 2024-01-16 13:32:50 回复(0)