📜  C++ 程序的输出 |设置 48(位操作)

📅  最后修改于: 2022-05-13 01:56:10.904000             🧑  作者: Mango

C++ 程序的输出 |设置 48(位操作)

Q.1这个程序的输出是什么?

#include 
using namespace std;
int main()
{
    int a = 35;
    int b = 12;
    printf("%d ", ~a);
    printf("%d ", ~ - b);
    return 0;
}

选项
a) -36 11
b) -35 -12
c) 220 11
d) 36 11

ans :-a

解释:- 对于任何整数 n,n 的按位补码总是 -(n+1)。所以这里 -(35+1) 和 -(-12+1)。

Q.2这个程序的输出是什么?

#include 
using namespace std;
int main()
{
    int a = 12;
    int b = 25;
    int c = 1;
    printf("%d", a ^ b && c);
    return 0;
}

选项
一)300
b) 1
c) 25
d) 212



ans :-b

说明:- 在这个程序中,我们简单地在 12(1010) 和 25(11001) 之间执行 XOR 运算,结果是 (10011) 等于 21,然后执行和运算。

Q.3这个程序的输出是什么?

#include 
using namespace std;
int main()
{
    unsigned char a = -8;
    unsigned char b = a >> 1;
    printf("%d\n", b);
}

选项
一)128
b) -8
c) -4
d) 124

ans :-d

解释:- 我们知道负数是用其正等价物的 2 的补码来表示的。所以 8 的 2 的补码是 (11111000),我们将它的 1 移位,所以它的 (01111100) 是 124。

Q.4这个程序的输出是什么?

#include 
using namespace std;
int main()
{
    signed char a = -128;
    signed char b = a >> 1;
    printf("%d\n", b);
    return 0;
}

选项c
一)128
256
c) -64
d) 64

ans :- -64

解释:- 在这段代码中,我们将 -128 右移 1。结果将是“-64”,由于操作数是有符号值,因此应用了二进制移位。

Q.5这个程序的输出是什么?

#include 
using namespace std;
int main()
{
    unsigned int x = 3;
    x = x | (x << x);
    cout << x;
    return 0;
}

选项
一)27
b) 24
c) 1
d) 0

ans :-a

解释:- 在这个程序中,整数 a 是 3,它的二进制 (011) 将其 (011000) 移了 3,等于 24,再加上 3,所以它等于 27。