首页 > 试题广场 >

要使a的低四位翻转,必须进行下列哪个操作()

[单选题]
要使a的低四位翻转,需要进行操作是()
  • a|0xF
  • a&0xF
  • a^0xF
  • ~a
0x开头为16进制,0xf对应的二进制数为1111。
^为异或操作,若参加运算的两个二进制位值相同则为0,否则为1;
a与0xf做异或操作,可以实现低四位的翻转。
如果是| 按位或 ,则将低四位数全变成1.
如果是& 按位与,则结果不变。

其他的位运算符号:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
发表于 2019-08-26 14:43:52 回复(1)
主要研究为什么选C不选D,因为他俩都能实现按位翻转。关键在于该题只需要低四位翻转。
假设int a = 3; 二进制表示为 00000000 00000000 00000000 00000011
低四位就是 0011, 需要将其翻转为 1100,
选项A为按位或运算, 有一个为1即为1,得到的结果是低四位=1111,不能实现按位翻转。
选项B为按位与运算,都为1才为1,得到的结果是低四位=0011,不能实现按位翻转。
选项C为按位异或运算,不同为1相同为0,可以通过与0xF异或的方式翻转低四位,
a=3的二进制表示 00000000 00000000 00000000 00000011
0xF的二进制表示 00000000 00000000 00000000 00001111 (具体可以通过右移运算符判断>>4 = 0)
异或后只翻转低四位。
3 ^ 0xF = 00000000 00000000 00000000 00001100
选项D的关键在于其只进行了按位取反操作,会对a的所有位都进行按位取反操作,
a = 00000000 00000000 00000000 00000011
~a = 11111111 11111111 11111111 11111100
该二进制表示的是以补码形式表示的负数-4

正数不需要进行按位取反加1的操作,其原码=反码=补码。只有负数才需要这样做。
假设我们现在有一个补码表示的负数,我们要想知道其原码为多少,可以对补码进行除符号位外按位取反再加1的操作。
~a = 11111111 11111111 11111111 11111100
     = 10000000 00000000 00000000 00000011
     = 10000000 00000000 00000000 00000100
     =  (-4)

因此D选项不光翻转了低四位,是翻转了每一位。所以选C。
#include <cstdio>
#include <cstdlib>
#include <cstring>

int main()
{
        int a = 0xF, b = 3;
    
        printf("a=[0x%X], b=[%d]\n", a, b);
    
        printf("十进制的[0xF]=[%d]\n", a);
        printf("十六进制的[0xF]=[%0X]\n", a);
        printf("八进制的[0xF]=[%0o]\n", a);
    
        printf("[0xF]^[3]十进制表示为[%d]\n", a ^ b);
        printf("[0xF]^[3]十六进制表示为[%X]\n", a ^ b);
        printf("[%d]按位取反=[%d]\n", b, ~b);

        return 0;
}


编辑于 2022-03-13 12:14:55 回复(0)
与低四位进行抑或操作( ^)例如0101 ^ 1111=1010,实现翻转
发表于 2019-08-17 12:00:29 回复(1)
请问1011与1111异或之后不是1101而是0100?
发表于 2022-09-02 12:14:23 回复(0)
0x开头为16进制,0xf对应的二进制数为1111。 ^为异或操作,若参加运算的两个二进制位值相同则为0,否则为1; a与0xf做异或操作,可以实现低四位的翻转。 如果是| 按位或 ,则将低四位数全变成1. 如果是& 按位与,则结果不变。 其他的位运算符号: & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1 ^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0 << 左移 用来将一个数的各二进制位全部左移N位,右补0 >> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
发表于 2019-09-27 15:32:55 回复(0)
a = 1010 1110, 翻转a的低四位。 只需要找一个b,把b的低四位设置为1,其余为0,即 b= 0000 1111. ^= 1010 0001. 就可以得到按位异或后的结果。 就把a的低四位按位翻转了。
发表于 2023-11-10 01:59:41 回复(0)
异或:位值相同则为0,反之为1
发表于 2022-01-22 17:14:58 回复(0)