习题-位运算
选择题
1、设 int b=2; 表达式 (b>>2)/(b>>1) 的值是 【 正确答案: A】。
A.0 B.2 C.4 D.8
2、有以下程序:
int main( )
{
unsigned char a,b;
a=4|3;
b=4&3;
printf( “ %d %d\n” ,a,b);
return 0;
}
执行后输出结果是 【 正确答案: A】。
A.7 0 B. 0 7 C.1 1 D.43 0
3、整型变量 x 和 y 的值相等、且为非 0 值,则以下选项中,结果为零的表达式是 【 正确答案: D】。
A. x || y B. x | y C. x & y D. x ^ y
4、以下程序的输出结果是 【 正确答案: A】。
int main()
{
char x=040;
printf("%o\n",x<<1);
return 0;
}
A. 100 B. 80 C. 64 D. 32
5、有以下程序:
int main()
{
unsigned char a,b,c;
a=0x3;
b=a|0x8;
c=b<<1;
printf( “ %d %d\n” ,b,c);
return 0;
}
程序运行后的输出结果是 【 正确答案: D】。
A. -11 12 B. -6 -13 C. 12 24 D. 11 22
6、设 char 型变量 x 中的值为 10100111 ,则表达式( 2+x)^( ~ 3)的值是 【 正确答案: D】。
A. 10101001 B. 10101000 C. 11111101 D. 01010101
7、有以下程序:
int main()
{
int x=3, y=2,z=1;
printf("%d\n",x/y&~z);
return 0;
}
程序运行后的输出结果是 【 正确答案: D】。
A.3 B.2 C.1 D.0
8、有以下程序:
int main()
{
unsigned short a;
int b=-1;
a=b;
printf("%hu",a);
return 0;
}
程序运行后的输出结果是 【 正确答案: B】。
A. -1 B. 65535 C. 32767 D. -32768
9、设有定义语句: char c1 = 92, c2 = 92;, 则以下表达式中值为零的是 【 正确答案: A】。
A. c1^c2 B. c1&c2 C. ~c2 D. c1|c2
10、若a = 1,b = 2; 则a|b的值是 【 正确答案: D】。
A.0 B.1 C.2 D.3
编程题
1、判断一个数是否是2的幂
【问题描述】以十进制形式输入一个整数,判断这个数是否是2的幂
【输入形式】一个十进制整数
【输出形式】判断这个数是否是2的幂
【样例输入】256
【样例输出】256 is a power of 2
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{int n=1,x,i;scanf("%d",&x);for(i=1;i<=32;i++)while(n<x){n=1<<i;i++;}if(n==x){printf("%d is a power of 2\n",x);}else{printf("%d is not a power of 2\n",x);}return 0;
}
2、编程取二进制数的奇数位
【问题描述】编程实现,对一个16位的二进制数取出它的奇数位(16位分别是:1~16位,奇数位即从左边起第1,3,5,...15位),组成一个新的数。
【输入形式】输入一个八进制数
【输出形式】用8进制形式输出取出的奇数位所组成的数
【样例输入】145432
【样例输出】result:263
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{int x,i,j=7,sum=0;unsigned short int y,z;scanf("%o",&x);for(i=0;i<=14;i=i+2){y=x<<i;z=y>>15;sum+=z*(int)pow(2.0,j);j--;}printf("result:%o\n",sum);return 0;
}
3、从一个16位的单元中取出某几位
【问题描述】从一个16位的单元中取出某几位(即该几位保留原值,其余位为0. 使用value存放该16位的数,n1为欲取出的起始位,n2为欲取出的结束位。(注意:是从左到右取)
【输入形式】
输入3个数:value n1,n2
value为八进制数
n1、n2为十进制数,n1与n2之间英文逗号间隔
【输出形式】
以8进制形式输出取出的从n1~n2这几位的值
【样例输入】
173253
5,8
【样例输出】
result:6
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{unsigned short int x,y;int a,n1,n2;scanf("%o",&a);scanf("%d,%d",&n1,&n2);x=a<<(n1-1);y=x>>(16-(n2-n1+1));printf("result:%o\n",y);return 0;
}