C语言位运算经典练习
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A) 0
B) 1
C) 2
D) 3
void main()
{ int x=0.5; char z=’a’;
printf(“%d\n”, (x&1)&&(z<’z’) ); }
11、设 int b=2;表达式(b>>2)/(b>>1)的值是( B )。
A) 0
B) 2
C) 4
D) 8
二、填空题
1 、 若 有 运 算 符 << , sizeof , ^ , &= , 则 按 优 先 级 由 高 到 低 排 列 为
low&0x00ff+high&0xff00
。
5、以下函数:
unsigned getbits(unsigned x ,unsigned p, unsigned n)
{ x = ((x<<(p+1-n) & ~((unsigned)~0>>n) ;
4
return (x) ;
}
若调用此函数时 x=0115032, p=7, n=4, 则函数返回值是
B) c1&c2
C) ~c2
D) c1|c2
3、有以下程序:
void main()
{ unsigned int a;
int b=-1;
a=b;
printf("%u",a);
}
程序运行后的输出结果是( B )。//在 int 占 2 byte 时成立。
A) -1
B) 65535
C) 32767
D) -32768
4、有以下程序:
void main( )
{ unsigned char a,b;
a=4|3;
b=4&3;
printf(“%d %d\n”,a,b)(;
}
执行后输出结果是( A )。
A) 7 0
B) 0 7
C) 1 1
D) 43 0
5、有以下程序:
void main()
{ int x=3, y=2,z=1;
int main() {
short value,n; scanf("%hd %hd",&value, &n); move(value, n); return 0; }
void move(short value,short n) {
short temp = value; if(n>0) {
temp = temp >> n; printf("%d 右移 %d 位的结果是: %d\n",value,n,temp); } else if(n<0) { temp = temp << n; printf("%d 左移 %d 位的结果是: %d\n",value,n,temp); } }
{ unsigned char a, b;
a=7^3; b= ~4 & 3;
printf("%d %d\n",a,b);
}
程序运行后的输出结果是( A )。
A)4 3
B)7 3
C)7 0
D)4 0
2、设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是(A )。
A) c1^c2
7、有以下程序:
void main()
{ unsigned char a,b,c;
a=0x3; b=a|0x8; c=b<<1;
printf(“%d%d\n”,b,c);
}
程序运行后的输出结果是( D )。
A) –11 12
B) –6 –13
C) 12 24
D) 11 22
8、以下程序的输出结果是( A )。
value为该16位两个字节单元中的数据值n1为欲取出的起始位n2为欲取出的结束位getbits010167558表示对八进制101675这个数取出它从左起的第5includestdiohvoidgetbitsshortvalueintn1intn2
一、选择题
1、以下程序的功能是进行位运算:
void main()
3、编译一函数来实现左右循环移位.函数名为 move,调用方法为: move(value,n)
其中 value 为要循环位移的数,n 为位移的位数.如 n<0 为左移;n>0 为ቤተ መጻሕፍቲ ባይዱ移.如 n=4,表示右移 4 位,n=-3 表示左移 3 位。
#include<stdio.h> void move(short value,short n);
0
。
6、若 x=0123,则表达式(5+(int)(x))&(~2)的值是
88
。
三、编程题
1、编写一个函数 getbits,从一个 16 位的单元中取出某几位(即该几位保留原值,其余位为 0)。
函数调用形式为: getbits(value,n1,n2)。
value 为该 16 位(两个字节)单元中的数据值,n1 为欲取出的起始位,n2 为欲取出的结束位
void main()
{ char x=040;
printf("%0\n",x<<1);
}
A) 100
B) 80
C) 64
D) 32
9、 整型变量 x 和 y 的值相等、且为非 0 值,则以下选项中,结果为零的表达式是
( D )。
A) x || y
B) x | y
C) x & y
D) x ^ y
10、以下程序的输出结果是( Ac)。
sizeof(),<<,^,&=
。
2、设有 char a,b;若要通过 a&b 运算屏蔽掉 a 中的其它位,只保留第 1 和第 7 位(右起为
第 0 位),则 b 的二进制数是 1000 0010
。
3、测试 char 型变量 a 第五位是否为 1 的表达式是 (a>>4&1)!=0
。
4、把 int 型变量 low 中的低字节及变量 high 中的高字节放入变量 s 中的表达式是
printf("%d\n",x/y&~z);
}
程序运行后的输出结果是( D )。
A) 3
B) 2
C) 1
D) 0
6、设 char 型变量 x 中的值为 10100111,则表达式(2+x)^(~3)的值是( D )。
A) 10101001
B) 10101000
C) 11111101
D) 01010101
void getbits(short value) {
short temp = value; for(int i = 1; i<16;i=i+2) {
printf("%d 的第 %d 位为:%d\n",value,i,(temp&0x8000)>>15); temp = temp << 2; } }
getbits(value, n1, n2);
return 0; }
void getbits(short value, int n1, int n2) {
short temp = value; temp = temp << (n1-1); for(int i = n1; i<=n2;i++) {
printf("%d 的第 %d 位为:%d\n",value,i,(temp&0x8000)>>15); temp = temp << 1; }
如: getbits(0101675,5,8)表示对八进制 101675 这个数,取出它从左起的第 5 位到第 8 位.
#include<stdio.h>
void getbits(short value, int n1,int n2); int main() {
short value, n1, n2; scanf("%hd %hd %hd",&value, &n1, &n2);
}
2、写一个函数,对于一个 16 位的二进制数取出它的奇数位(即从左边起第 1,3,5…..15 位)。
#include<stdio.h>
void getbits(short value); int main() {
short value; scanf("%hd",&value); getbits(value); return 0; }