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。