首页 > 试题广场 >

以下哪个选项一定可以将flag的第二个bit置0

[单选题]
以下哪个选项一定可以将flag的第二个bit置0
  • flag&=~2
  • flag|=2
  • flag^=2
  • flag>>=2
推荐
A选项 先取反 再进行与运算。~2的结果为0111 1101 再与flag与 flag的第二位一定为0. B选项 flag的第二位为1. C选项 ^ 相同为0 不同为1 flag的第二位可能为0可能为1. D选项 左移运算 不能确定第四位到底是1或者是0. 答案为A.
编辑于 2015-12-08 15:38:15 回复(6)
解析:
A选项:flag&=~2,即flag=flag&(~2),2的原码是00000010,~是对2进行取反,~2为11111101,flag与操作之后,第二位置0.
B选项:flag|=2,即flag=flag|2,2的原码是00000010,第二位是1,或操作后,flag的第二位被置。
C选项:flag^=2,^是异或运算符,相同为0,不同为1,flag中的第二位不确定,因为运算后的flag的第二bit位也不确定。
D选项:flag>>=2,>>是右移运算符,向右移两位,flag中的第四位变成现在的第二位,由于flag中的第四位不确定,因为第二bit位也不确定。


发表于 2018-03-29 09:05:44 回复(2)
没看懂题意的我
发表于 2017-07-27 17:30:04 回复(0)
看了前两个的解析愣是没看明白,自己去网上查查的结果一目了然
负数在计算机中的存储方式
以补码的形式存储:
正数的补码就是 其本身
负数的补码是取绝对值后,再取反后,再加1
例如:
-1 绝对值的二进制形式为 0000 0001
                              取反  1111 1110
                              加1   1111 1111
因此在计算机中的存储为1111 1111

-2  为 1111 1110;

~2 取反运算符
  2 的 二进制表示形式为 0000 0010
                         取反为 1111 1101
即是-3在计算机中的存储形式;
发表于 2017-03-07 10:14:42 回复(3)
A,flag = flag&(~2)  2是00000010,~2是11111101,  第二位是0,与flag的第二位相与,结果一定为0
B,flag = flag | 2      flag的第二位不确定,或的结果也就不确定
C,异或操作  相同为0,不同为1,结果不确定
D, flag = flag>>2,flag右移两位,将第四位移到第二位,因为第四位不确定,所以结果不确定
发表于 2017-05-14 14:38:40 回复(2)
A选项 先取反 再进行与运算。~2的结果为0111 1101  与 flag的第二位相与 一定为0. 
B选项 取或结果不一定为1.
 C选项 ^ 相同为0 不同为1 flag的第二位可能为0可能为1. 
D选项 右移运算 不能确定第四位到底是1或者是0. 答案为A
编辑于 2016-06-07 14:34:12 回复(2)

与0与置0,与1或置1

发表于 2016-03-04 13:39:59 回复(0)
D如果改成flag<<=2,应该也可以
发表于 2017-04-17 15:12:09 回复(0)
2的二进制表示为0000 0010。~2的二进制表示为1111 1101。flag的第二个bit为右边数的第二个bit位。

发表于 2017-04-11 14:57:25 回复(0)
第二位bit表示从右到左第二位bit
发表于 2018-03-29 08:28:14 回复(0)
|:只要有一个1即为1
&:同为1时才为1
^:两个数相同时为1,不同为0
~:取反
>>:右移
2转化为二进制:0010,第二位为1
分析选择A
编辑于 2022-09-10 15:46:46 回复(0)
有没有人也把flag^=2看成flag的平方的😅
发表于 2022-04-23 08:59:03 回复(0)
发表于 2022-03-01 21:30:51 回复(0)
2的二进制码:0000 0010
~2是取反的意思:1111 1101
flag&~2:相与,有0为0,全为1则1,所以第二个bit位相与后为0
发表于 2021-09-08 19:51:41 回复(0)
清零不是置一,看清楚啊!
发表于 2018-08-13 08:59:55 回复(0)
这不就是单片机里面,将寄存器的某一位置零,同时不影响寄存器其他位的操作吗?
很普通的实现,单片机例程里面大部分都是这样实现的;
比如将某寄存器的第二位置零,
之所以用flag &= ~0x02; 而不是flag &= 0xfd; 是因为前者写起来更容易理解,
否则还要在草稿纸上计算0x1111 1101是0xfd……
发表于 2018-05-28 09:36:39 回复(0)
A看成-2A的举手
发表于 2018-05-05 18:00:54 回复(0)
A选项 先取反 再进行与运算。~2的结果为0111 1101 再与flag与 flag的第二位一定为0. B选项 flag的第二位为1. C选项 ^ 相同为0 不同为1 flag的第二位可能为0可能为1. D选项 左移运算 不能确定第四位到底是1或者是0. 答案为A.
发表于 2017-04-11 16:24:04 回复(0)
A
发表于 2016-08-28 09:37:11 回复(0)
A
发表于 2015-12-10 00:21:34 回复(0)