当前位置:文档之家› C语言程序设计 位运算

C语言程序设计 位运算

一、选择题1、读程序片段:int x=20;printf(“%d\n”, ~x);上面程序片段的输出结果是( ).A)02 B)–20 C)-21 D)-112、表达式~0x13的值是( ).A)0xFFEC B)0xFF71 C)0xFF68 D)0xFF173、在位运算中,操作数每右移一位,其结果相当于( ).A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以44、在位运算中,操作数每左移一位,其结果相当于( ).A)操作数乘以2 B)操作数除以2 C)操作数除以4 D)操作数乘以45、设有以下语句:char x=3,y=6,z;z=x^y<<2;则z的二进制值是( ).A)00010100 B)00011011 C)00011100 D)000110006、请读程序: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: 1b_bit: 2 b_bit: 1 b_bit: 1 b_bit: 2c_bit: 0 c_bit: 0 c_bit: 1 c_bit: 2d_bit: 1 d_bit: 1 d_bit: 0 d_bit: 0e_bit: 2 e_bit: 2 e_bit: 2 e_bit: 17、设有以下说明: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) data.four=18、设位段的空间分配由右到左,则以下程序的运行结果是( ).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、请读程序片段: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("%d\n",data);}三、编程题1、请编程序:从终端读入16进制无符号整数m,调用函数rightrot将m中的原始数据循环右移n位。

并输出移位前后的内容。

2、请编写函数getbits从一个16位的单元中取出以n1开始至n2结束的某几位,起始位和结束位都从左向右计算。

同时编写主函数调用getbits进行验证。

3、设计一个函数,使给出一个数的原码,能得到该数的补码参考答案一、选择题1、取地址,按位与2、a=a&b3、x=x^y一2或X=x^(y一2)4、$$$5、100000106、a&040或a&0x20或a&327、000011118、一1.1777779、0377 10、1111000011、mmm 12、 -2 13、a:9a b:ff65 14、-2,62 15、0x6c 16、1,4,1617、0130或88或0x58 18、aAND b:85 aOR b:bd aN0R b:3819、x=104000,y1=7,y2=104007 20、s=high & 0xff00|low &0xOOff或s=high &0177400|low & 0377或s=high & 65280|low & 255 21、59 22、0120000或120000 23、105编程题1、main()unsigned rightrot(unsigned a,int n);unsigned int m,b;Int n;printf("enter m and n:”);scanf(”%x,%d",&m,&n);printf("m=%x,n=%d\n”,m,n);b=rightrot(m,n);printf("b=%x\n”,b);}unsigned rightrot(unsigned a,int n){int rb;while(n-->0)rb=(a&1)<<(16一1);/*分离出最低位*/a=a>>l;a=a|rb;/*将移出的低位置于最高位*/}return(a);}2、main(){unsigned x;int n1,n2;printf("请输入一个八进制数x:");scanf("%o",&x);printf("请输入起始位n1,结束位n2:");scanf("%d,%d",&n1,&n2);printf("%o",getbits(x,n1—1,n2));}getbits(value,nl,n2)unsingned value;int n1,n2;{unsigned z;z=~0;z=(z>>n1)&(z<<(16-n2));z=value&z;z=z>>(16-n2);return(z);3、main(){unsigned int a;unsigned int getbits(unsigned);printf(“\ninput an octal number:”); scanf(“%o”,&a);printf(“result :%o\n”,getbits(a)); } unsigned int getbits(unsigned value) {unsigned int z;z=value&0100000;if(z==0100000)z=~value+1;elsez=value;return(z); }。

相关主题