一、选择题1、以下程序的功能是进行位运算:voidmain(){unsignedchara,b;a=7^3;b=~4&3;printf(%d%d\n,a,b);}程序运行后的输出结果是(A)。A)43B)73C)70D)402、设有定义语句:charc1=92,c2=92;,则以下表达式中值为零的是(A)。A)c1^c2B)c1&c2C)~c2D)c1|c23、有以下程序:voidmain(){unsignedinta;intb=-1;a=b;printf(%u,a);}程序运行后的输出结果是(B)。//在int占2byte时成立。A)-1B)65535C)32767D)-327684、有以下程序:voidmain(){unsignedchara,b;a=4|3;b=4&3;printf(“%d%d\n”,a,b)(;}执行后输出结果是(A)。A)70B)07C)11D)4305、有以下程序:voidmain(){intx=3,y=2,z=1;printf(%d\n,x/y&~z);}程序运行后的输出结果是(D)。A)3B)2C)1D)06、设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是(D)。A)10101001B)10101000C)11111101D)010101017、有以下程序:voidmain(){unsignedchara,b,c;a=0x3;b=a|0x8;c=b1;printf(“%d%d\n”,b,c);}程序运行后的输出结果是(D)。A)–1112B)–6–13C)1224D)11228、以下程序的输出结果是(A)。voidmain(){charx=040;printf(%0\n,x1);}A)100B)80C)64D)329、整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是(D)。A)x||yB)x|yC)x&yD)x^y10、以下程序的输出结果是(Ac)。A)0B)1C)2D)3voidmain(){intx=0.5;charz=’a’;printf(“%d\n”,(x&1)&&(z’z’));}11、设intb=2;表达式(b2)/(b1)的值是(B)。A)0B)2C)4D)8二、填空题1、若有运算符,sizeof,^,&=,则按优先级由高到低排列为sizeof(),,^,&=。2、设有chara,b;若要通过a&b运算屏蔽掉a中的其它位,只保留第1和第7位(右起为第0位),则b的二进制数是10000010。3、测试char型变量a第五位是否为1的表达式是(a4&1)!=0。4、把int型变量low中的低字节及变量high中的高字节放入变量s中的表达式是low&0x00ff+high&0xff00。5、以下函数:unsignedgetbits(unsignedx,unsignedp,unsignedn){x=((x(p+1-n)&~((unsigned)~0n);4return(x);}若调用此函数时x=0115032,p=7,n=4,则函数返回值是0。6、若x=0123,则表达式(5+(int)(x))&(~2)的值是88。三、编程题1、编写一个函数getbits,从一个16位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value,n1,n2)。value为该16位(两个字节)单元中的数据值,n1为欲取出的起始位,n2为欲取出的结束位如:getbits(0101675,5,8)表示对八进制101675这个数,取出它从左起的第5位到第8位.#includestdio.hvoidgetbits(shortvalue,intn1,intn2);intmain(){shortvalue,n1,n2;scanf(%hd%hd%hd,&value,&n1,&n2);getbits(value,n1,n2);return0;}voidgetbits(shortvalue,intn1,intn2){shorttemp=value;temp=temp(n1-1);for(inti=n1;i=n2;i++){printf(%d的第%d位为:%d\n,value,i,(temp&0x8000)15);temp=temp1;}}2、写一个函数,对于一个16位的二进制数取出它的奇数位(即从左边起第1,3,5…..15位)。#includestdio.hvoidgetbits(shortvalue);intmain(){shortvalue;scanf(%hd,&value);getbits(value);return0;}voidgetbits(shortvalue){shorttemp=value;for(inti=1;i16;i=i+2){printf(%d的第%d位为:%d\n,value,i,(temp&0x8000)15);temp=temp2;}}3、编译一函数来实现左右循环移位.函数名为move,调用方法为:move(value,n)其中value为要循环位移的数,n为位移的位数.如n0为左移;n0为右移.如n=4,表示右移4位,n=-3表示左移3位。#includestdio.hvoidmove(shortvalue,shortn);intmain(){shortvalue,n;scanf(%hd%hd,&value,&n);move(value,n);return0;}voidmove(shortvalue,shortn){shorttemp=value;if(n0){temp=tempn;printf(%d右移%d位的结果是:%d\n,value,n,temp);}elseif(n0){temp=tempn;printf(%d左移%d位的结果是:%d\n,value,n,temp);}}