📜  C 程序的输出 |第 55 组(移位运算符)

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

C 程序的输出 |第 55 组(移位运算符)

先决条件:移位运算符

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

#include 
int main()
{
    unsigned int i = 0x80;
    printf("%d ", i << 1);
    return 0;
}

选项
一)0
256
c) 100
d) 80

ans :- b

解释:- 我们知道 0x 是数字的十六进制表示,所以 80 转换为十进制是 128 二进制(10000000),它的左移 1 所以它是(100000000)等于 256。

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



#include 
int main()
{
    unsigned int a = 0xffff;
    unsigned int k = ~a;
    printf("%d %d\n", a, k);
    return 0;
}

选项
a) 65535 -65536
b) -65535 65535
c) 65535 65535
d) -65535 -65535

ans :- a

说明:- 此代码 0x 是数字的十六进制表示,因此 ffff 十六进制转换为十进制 65535 并存储在 a. -65535 的否定存储在 k 中。 k 是一个无符号整数,但它有一个负值。当 k 被打印时,格式说明符是 %d,它代表有符号整数,因此 -65536 被打印为 k 的值。如果 k 的格式说明符是 %u,则打印的值是 4294901760。

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

#include 
int main()
{
    unsigned int a = -1;
    unsigned int b = 4;
    printf("%d\n", a << b);
    return 0;
}

选项
一)-1
b) 16
c) 8
d) -16

ans :- d

解释:- 这里的整数只是左移 4 位并打印,所以它是 -16。

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

#include 
int main()
{
    unsigned int m = 32;
    printf("%d %d", m >> 1, ~m);
    return 0;
}

选项
一) 16 5
b) 64 -32
c) 16 33
d) 16 -33

ans :- d

解释:- 这个程序 32 是(10000),我们知道二进制系统中的负数包含一个补码,所以这里取一个数字的补码,只打印这个数字,所以 32 的负数是 -33。

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

#include 
int main()
{
    unsigned int a = -1;
    unsigned int b = 15;
    printf("%d, ", a << 1);
    printf("%d\n", b >> 1);
    return 0;
}

选项
a) -2, 7
b) 2, 8
c) -1, 15
d) -2, 15

ans :- a

解释:- 这里 -1 binary(0001) 如果左移 1 所以它是 -2(0010) 和 15 binary(1111) 是右移 1 所以它是 (0111) 所以值 7。