您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页位运算

位运算

来源:华佗小知识


习题八 位运算

选择题

1. 变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是______。

A、a^b B、a|b C、a&b D、a<<4

2. 有以下程序

#include

main()

{ char a=4;

printf(\"%d\\n\

}

程序的运行结果是______。

A、40 B、16 C、8 D、4

3. 有以下程序

main()

{unsigned char a,b,c;

a=0x3; b=a|0x8; c=b<<1;

printf(\"%d%d\\n\

}

程序运行后的输出结果是______。

A、-11 12 B、-6 -13 C、12 24 D、11 22

4. 整型变量X和Y的值相等,且为非0值,则以下选项中结果为0的表达式是______。

A、X||Y B、X|Y C、X&Y D、X^Y

5. 以下程序的输出结果是______。

main()

{ int x=05; char z='a';

printf(\"%d\\n\ }

A、0 B、1 C、2 D、3

6. 有以下程序

main()

{ unsigned char a=2,b=4,c=5,d;

d=a|b; d&=c; printf(\"%d\\n\

程序运行后的输出结果是______。

A、3 B、4 C、5 D、6

7. 设有以下语句

int a=1,b=2,c;

c=a^(b<<2);

执行后,c的值为______。

A、6 B、7 C、8 D、9

8. 以下程序的功能是进行位运算

main()

{ unsigned char a,b;

a=7∧3; b=~4&3;

printf(\"%d %d\\n\

程序运行后的输出结果是______。

A、4 3 B、7 3 C、7 0 D、4 0

9.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是______。

A、c1^c2 B、c1&c2 C、~c2 D、c1|c2

10.有以下程序:

main()

{ unsigned char a,b;

a=4|3;

b=4&3;

printf(\"%d %d\\n\

执行后输出结果是______。

A、7 0 B、0 7 C、1 1 D、43 0

11.设有以下语句

char a=3,b=6,c;

c=a^b<<2;

则c的二进制值是______。

A、00011011 B、00010100 12.有以下程序

main()

{ int x=3, y=2, z=1;

printf(\"%d\\n\

}

C、00011100 D、00011000

程序运行后的输出结果是______。

A、3 B、2 C、1 D、0

13. 有以下程序

main()

{ int x=3, y=2, z=1;

printf(\"%d\\n\

}

程序运行后的输出结果是______。

A、3 B、2 C、1 D、0

14. 有以下程序:

main()

{ unsigned char a,b;

a=3|2;

b=3&2;

printf(\"%d %d\\n\

}

执行后输出结果是______。

A、1 1 B、3 2 C、0 0 D、3 15. 有以下程序

main()

{ unsigned char a=2,b=4,c=5,d;

d=a|b; d&=c; printf(\"%d\\n\

}

程序运行后的输出结果是______。

A、3 B、4 C、5 D、6

填空题:

1

二、填空题:

1、与表达式a&=b等价的另一种书写形式是__ a=a&b ______。

2、请读程序片段:

int a=1,b=2;

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

else printf(“$$$\\n”);

以上程序片段的输出结果是__$$$______。

3、请读程序片段:

int a=-1;

a=a|0377;

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

以上程序片段的输出结果是__-1,177777______。

4、请读程序片段

int m=20,n=025;

if(m^n) printf(“mmm\\n”);

else printf(“nnn\\n”);

以上程序片段的输出结果是__ mmm ______。

5、请读程序片段:

int x=1;

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

以上程序片段的输出结果是__-2______。

6、以下程序的运行结果是__ a:9a,b:ff65______。

main()

{

unsigned a,b;

a=0x9a;

b=~a;

printf(“a:%x,b:%x\\n”,a,b);

}

7、以下程序的运行结果是__-2,62______。

main()

{

char a=-8;unsigned char b=248;

printf(“%d,%d”,a>>2,b>>2);

}

8、以下程序的运行结果是__0x6c ______。

main()

{

unsigned char a,b;

a=0x1b;

printf(“%0x%x\\n”,b=a<<2);

}

9、若x=0123,则表达式(5+(int)(x))&(~2)的值是__0130或88或0x58______。

10、以下程序的运行结果是___ x=11,y=17,z=11_____。

main()

{

unsigned char a,b;

a=0x9d;

b=0xa5;

printf(“a AND b:%x,”,a&b);

printf(“a OR b:%x,”,a|b);

printf(“a NOR b:%x\\n”,a^b);

}

11、设int b=2; 表达式(b<<2)/(b>>1)的值是(8)。

12、以下程序的输出结果是(100)

main()

{int x=040;

printf(“%o”, x<<1);

}

编程题

1、取一个整数a从右端开始的4~9位。main()

{

unsigned a,b,c,d;

scanf(\"%o\

位号从0开始,例如:16位数位0-15位;]。 [

b=a>>4;

c=~(~0<<6);

d=b&c;

printf(\"%o,%d\\n%o,%d\\n\

}

2、从键盘上输入一个正整数给整型变量a,按二进制位输出该数。

#include

main()

{

int a,b,i;

printf(\"请输入一个整型数:\");

scanf(\"%d\

b=1<<15; /*构造一个最高位为 1、其余各位为0的整数*/

printf(\"%d=\

for(i=1;i<=16;i++)

{

putchar(a&b?'1':'0'); /*输出最高位的值(1/0)*/

a<<=1; /*将次高位移到最高位上*/

if(i%4==0) putchar(','); /*四位一组用逗号分开*/

}

printf(\"\\bB\\n\");

}

3、 将十六进制数转换成二进制

人们有时希望知道某个十六进制数的二进制数是什么?但是C语言的printf函数只提供十六进制、十进制、八进制形式的输出而不能直接输出一个整数对应的二进制形式。如果采用人工转换,则肯定会不方便。下面用位运算来实现:

对一个整数num(16位)的每一位进行测试,视其为0还是1。可以设置一个屏蔽字与该数进行与运算,从而取出所需的一个位的状态。从第15位开始,设置屏蔽字为0x8000

(最高位为1,其余各位为0)并将它赋给一个变量mask,计算表达式bit=mask&num?1:0的值,若结果为1,则说明num的第15位为1,否则为0。每次进入下一轮循环时将mask右移一位,循环16次之后,就可以得到结果。

main()

{

int bit, i, num;

unsigned int mask=0x8000;

scanf(“%d”,&num);

for(i=0;i<16;i++)

{

bit=mask&num?1:0;

printf(“%d”,bit);

mask>>=1;

}

}

4、设计一个函数,使得给出的一个数的原码,能得到该数的补码。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务