|
|
一、选择题 1.以下关于位运算的叙述错误的是( )。 A、位操作是对字节或字节内部二进制位进行测试、设置、移位或逻辑的运算 B、按位取反运算的运算规则是:0的按位取反结果为1,1的按位取反结果为0 C、对于无符号数而言,左移位相当于乘2运算,左移n位相当于乘2的n次方 D、对于无符号数而言,右移位相当于乘2运算,右移n位相当于乘2的n次方
2.设x=2,y=3,则表达式x<<y的值为( )。 A、9 B、8 C、16 D、5
3.下列程序运行时,如果输入4和3则输出结果是( )。 #include <stdio.h> void main() { int a,b,e; puts("请输入a和b的值:"); scanf("%d",&a); scanf("%d",&b); e=a<<b; printf("%d\n",e); } A、-17 B、-256 C、32 D、5
4.下列程序的输出结果是( )。 #include <stdio.h> void main() { int x; long y; long z; x=32; y=-8; z=x&y|y; printf("%ld\n",z); } A、-17 B、-8 C、16 D、5
5.阅读下列程序,判断在输入“1,2”时,程序输出的c值为( )。 #include <stdio.h> void main() { int a; long b; long c; puts("请输入a和b的值:\n"); scanf("%ld,%ld",&a,&b); c=(a^b)&(~b); printf("The value of c is %ld\n",c); } A、-1 B、-2 C、1 D、2
6.下列运算符的优先级最高的是( )。 A、| B、+ C、~ D、&
7.下列程序输出的p值为( )。 #include <stdio.h> void main() { int m=3; long n=5; long p; p=(n<<m)+(m*n) ; printf("The value of p is %ld\n",p); } A、-40 B、-45 C、40 D、55
8.在移位运算中,对于无符号数,左移n位相当于( )。 A、该数乘以2的n-1次方 B、该数除以2的n-1次方 C、该数乘以2的n次方 D、该数除以2的n次方
9.仔细阅读下列程序,判断下列程序在输入“1,2”时的输出结果( )。 #include <stdio.h> void main() { int x; long y; long z; int a,b ; puts("请输入x和y的值:\n"); /*在屏幕上输出一串字符串提示*/ scanf("%d,%ld",&x,&y); x&=y; z=x&~y; a=sizeof(x); b=sizeof(z); printf("%ld %d %d\n",z,a,b); } A、0 4 4 B、1 2 4 C、7 8 4 D、0 7 8
10.有以下程序: #include <stdio.h> void main() { char x=040; printf("%d\n",x=x<<1); } 程序运行后的输出结果是( )。 A、100 B、160 C、120 D、64
11.设有定义语句: char a=3,b=6,c; 则执行赋值语句c=a^b<<2;后变量c中的二进制值是( )。 A、00011011 B、00010100 C、00011100 D、00011000
12. 有以下程序: #include <stdio.h> void main() { short int x=35; char z='A'; printf("%d\n",(x&15)&&(z<'a')); } 程序运行后的输出结果是( )。 A、0 B、1 C、2 D、3
13.有以下程序: #include <stdio.h> void main() { short int a=5,b=6,c=7,d=8,m=2,n=2; printf("%d\n",(m=a>b)&(n=c>d)); } 程序运行后的输出结果是( )。 A、0 B、1 C、2 D、3
二、填空题 1.位操作可以分为两类,一类是( ),一类是( )。 2.位逻辑运算的四个操作符中( )操作符的运算对象只有一个。 3.移位运算中的无符号数右移时,左端空出的位补( )。 4.位运算符可以和赋值运算符构成( )位运算符。 5.当参加位运算的两个操作数的长度不等时系统自动按( )。对于无符号数,系统在做对齐处理时,左端一律补( )。对于有符号数来说,正数在做对齐处理时,左端补( );负数在做对齐处理时,左端补( )。 6.位段结构的特殊性是其各个成员只能是( )型的。 7.设变量a的二进制数是00101101,若想通过运算a^b使a的高四位取反,低四位不变,则b的二进制数应是( )。 8.a为任意整数,能将变量a清0的表达式是( )。 9.a为八进制数07101。能将变量a中的各二进制位均置成1的表达式是( )。 10.能将两字节变量x的高8位全置1,低8位字节保持不变的表达式是( )。 11.运用位运算,能将八进制数012500除以4,然后赋给变量a的表达式是( )。 12.运用位运算,能将字符型变量ch中大写字母转换成小写字母的表达式是( )。
三、程序设计题 1.编写程序实现取一个整数a从右端开始的第4~7位。 2.定义一个位段,使其满足下面的要求: ①a有2位; ②b有2位; ③c有2位; ④d有4位,且另起一个存储单元; ⑤f有7位。 |
|
答案: |
1、选择题 (1)D (2)C (3)C (4)B (5)C (6)C (7)D (8)C (9)A (10)D (11)A (12)B (13)A
2、填空题 (1) 逻辑位运算、移位运算 (2)按位取反。 (3) 0 (4) 复合赋值位运算符 。 (5) 右对齐、0、0、1 (6) 整型 。 (7) 11110000 (8) a^=a 。 (9) a=~(a^a) (10) x=(x|ff00)|(x&00ff) 。 (11) a=012500>>2 (12)ch=ch|32
3、程序设计题 (1) /* 题目:取一个整数a从右端开始的4~7位。 程序分析:可以这样考虑: (1)先使a右移4位。 (2)设置一个低4位全为1, 其余全为0的数。可用~(~0<<4) (3)将上面二者进行&.运算。
*/ #include <stdio.h> void main() { unsigned a,b,c,d; scanf("%o",&a); b=a>>4; c=~(~0<<4); d=b&c; printf("%o\n%o\n",a,d); } (2) #include <stdio.h> void main() { struct bit { unsigned a:3; unsigned b:2; unsigned c:2; /*unsigned类型的数据在VC6.0中为4个字节*/ unsigned x:32-(3+2+2);/*定义25位不使用的位段*/ unsigned d:4; /*d另起一个存储单元*/ unsigned f:7; }s={1,2,3,0,4,5}; /*初始化*/ printf("%d %d %d %d %d %d\n",s.a,s.b,s.c,s.x,s.d,s.f); } |
|