C语言程序设计 位运算

发布时间 : 星期一 文章C语言程序设计 位运算更新完毕开始阅读

一、选择题

1、读程序片段:

int x=20;

printf(“%d\\n”, ~x);

上面程序片段的输出结果是( ).

A)02 B)–20 C)-21 D)-11 2、表达式~0x13的值是( ).

A)0xFFEC B)0xFF71 C)0xFF68 D)0xFF17

3、在位运算中,操作数每右移一位,其结果相当于( ).

A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以4 4、在位运算中,操作数每左移一位,其结果相当于( ).

A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以4 5、设有以下语句:

char x=3,y=6,z;

z=x^y<<2;

则z的二进制值是( ).

A)00010100 B)00011011 C)00011100 D)00011000 6、请读程序:

struct bit {unsigned a_bit:2; unsigned b_bit:2; unsigned c_bit:1; unsigned d_bit:1; unsigned e_bit:2; unsigned word:8; };

main()

{struct bit *p;

unsigned int modeword;

printf(“Enter the mode word (HEX):”); scanf(“%x”,&modeword); p=(struct bit *)&modeword; printf(“\\n”);

printf(“a_bit: %d\\n”,p ->a_bit); printf(“b_bit: %d\\n”,p ->b_bit); printf(“c_bit: %d\\n”,p ->c_bit); printf(“d_bit: %d\\n”,p ->d_bit); printf(“e_bit: %d\\n”,p ->e_bit);}

若运行时从键盘输入: 96<回车> 则以上程序的运行结果是( ). A)a_bit: 1 B) a_bit: 2 C)a_bit: 2 D) a_bit: 1

b_bit: 2 b_bit: 1 b_bit: 1 b_bit: 2 c_bit: 0 c_bit: 0 c_bit: 1 c_bit: 2 d_bit: 1 d_bit: 1 d_bit: 0 d_bit: 0

e_bit: 2 e_bit: 2 e_bit: 2 e_bit: 1

7、设有以下说明: struct packed { unsigned one:1; unsigned two:2; unsigned three:3; unsigned four:4;

} data;

则以下位段数据的引用中不能得到正确数值的是( ). A) data.one =4 B) data.two=3 C) data.three =2 D) 8、设位段的空间分配由右到左,则以下程序的运行结果是( ).

struct packed_bit {unsigned a:2; unsigned b:3; unsigned c:4; int i;

} data; main()

{data.a=8; data.b=2;

printf(“%d\\n”,data.a+data.b);} A) 语法错 B) 2 C) 5 D) 10 二、填空题

1、在C语言中,&运算符作为单目运算符时表示的是【 】;作为双目运算符时表示的是【】运算. 2、与表达式a&=b 等价的另一书写形式是【 】. 3、与表达式x^=y-2等价的另一书写形式是【 】. 4、请读程序片段:

int a=1,b=2;

if(a&b)printf(“***\\n”); else printf(“$$$\\n”);

以上程序片段的输出结果是【 】. 5、设有char a,b;若要通过a&b运算屏蔽掉a中的其它位,只保留第2和第8位(右起为第1位),则b的二进制数是【 】.

6、测试char型变量a第六位是否为1的表达式是【 】(设最右位是第一位) 7、设二进制数x的值是11001101,若想通过x&y运算使x中的低4位不变,高4位轻零,

则y的二进制数是【 】. 8、请读程序片段:

data.four=1

int a=-1; a=a |0377;

printf(“%d,%o\\n”,a,a);

以上程序片段的输出结果是【 】. 9、设x是一个整数(16bit),若要通过x|y使x低8位置1,高8位不变,则y的八进制数是【】.

10、x=10100011,若要通过x^y使x的高4位取反,低4位不变,则y的二进制数是【】。 11、请读程序片段:

int m=20,n=025;

else printf(“nnn\\n”) 以上程序片段的输出结果是【】. 12、请读程序片段:

int x=1;

printf(“%d\\n”,x);

上面程序片段的输出结果是【】. 13、 以下程序的运行结果是【】.

main()

{unsigned a,b; a=0*9;

b=a;

printf(“a:%x\\nb:%x\\n”,a,b);} 14、以下程序的运行结果是【 】.

main()

{char a=-8;unsigned char b=248; printf(“%d,%d”,a>>2,b>>2);} 15、以下程序的运行结果是【 】. main()

{

unsigned char a,b; a=0*1b;

printf(“0x%x\\n”,b=a<<2);} 16、请读程序片段:

unsigned a=16;

printf(“%d,%d,%d\\n”,a>>2,a=a>>2,a); 以上程序片段的输出结果是【 】.

17、若x=0123,则表达式(5+(int)(x))&(2)的值是【 】 18、下面程序的运行结果是【】.

main()

{unsigned char a,b; a=0x9d;

b=0xa5;

printf(“a AND b:%x\\n”a&b); printf(“a OR b:%x\\n”a│b); printf(“a NOR b:%x\\n”,a^b);} 19、下面程序的运行结果是【】

main()

{unsigned a=0361,x,y; int n=5;

x=a<<(16-n);printf(“x=%o\\n”,x); y=a>>n; printf(“y1=%o\\n”,y); y┆=x; printf(“y2=%o\\n”,y);}

20、把int类型变量low中的低字节及变量high中的高字节放入变量s中的表达式是【】。 21、以下程序的运行结果是【】. main()

{char a=0x95,b,c; b=(a&0xf)<<4; c=(a&0xf0)>>4; a=b┆c;

printf(“%x\\n”,a);} 22、请读以下函数:

getbits(unsigned x,unsigned p,unsigned n) { x=((x<<(p+1-n))&~((unsigned)~0>>n)); return(x);}

假设机器的符号整数字长为16位。

若调用此函数时x=0115032,p=7,n=4,则函数返回值的八进制数是【 】。 23、设位段的工件分配由右到左,则以下程序的运行结果是【 】。

struct packed_bit {unsigned a:2; unsigned b:3; unsigned c:4; int i; }data; main()

{data.a=1; data.b=2; data.c=3; data.i=0;

printf(\三、编程题

1、请编程序:从终端读入16进制无符号整数m,调用函数rightrot将m中的原始数据循环右移n位。并输出移位前后的内容。

2、请编写函数getbits从一个16位的单元中取出以n1开始至n2结束的某几位,起始

位和结束位都从左向右计算。同时编写主函数调用getbits进行验证。 3、设计一个函数,使给出一个数的原码,能得到该数的补码

联系合同范文客服:xxxxx#qq.com(#替换为@)