main()
{ char a=4;
printf(\"%d\\n\
}
程序的运行结果是______。
A、40 B、16 C、8 D、4
3. 有以下程序
main()
{unsigned char a,b,c;
a=0x3; b=a|0x8; c=b<<1;
printf(\"%d%d\\n\
}
程序运行后的输出结果是______。
A、-11 12 B、-6 -13 C、12 24 D、11 22
4. 整型变量X和Y的值相等,且为非0值,则以下选项中结果为0的表达式是______。
A、X||Y B、X|Y C、X&Y D、X^Y
5. 以下程序的输出结果是______。
main()
{ int x=05; char z='a';
printf(\"%d\\n\ }
A、0 B、1 C、2 D、3
6. 有以下程序
main()
{ unsigned char a=2,b=4,c=5,d;
d=a|b; d&=c; printf(\"%d\\n\
程序运行后的输出结果是______。
A、3 B、4 C、5 D、6
7. 设有以下语句
int a=1,b=2,c;
c=a^(b<<2);
执行后,c的值为______。
A、6 B、7 C、8 D、9
8. 以下程序的功能是进行位运算
main()
{ unsigned char a,b;
a=7∧3; b=~4&3;
printf(\"%d %d\\n\
程序运行后的输出结果是______。
A、4 3 B、7 3 C、7 0 D、4 0
9.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是______。
A、c1^c2 B、c1&c2 C、~c2 D、c1|c2
10.有以下程序:
main()
{ unsigned char a,b;
a=4|3;
b=4&3;
printf(\"%d %d\\n\
执行后输出结果是______。
A、7 0 B、0 7 C、1 1 D、43 0
11.设有以下语句
char a=3,b=6,c;
c=a^b<<2;
则c的二进制值是______。
A、00011011 B、00010100 12.有以下程序
main()
{ int x=3, y=2, z=1;
printf(\"%d\\n\
}
C、00011100 D、00011000
程序运行后的输出结果是______。
A、3 B、2 C、1 D、0
13. 有以下程序
main()
{ int x=3, y=2, z=1;
printf(\"%d\\n\
}
程序运行后的输出结果是______。
A、3 B、2 C、1 D、0
14. 有以下程序:
main()
{ unsigned char a,b;
a=3|2;
b=3&2;
printf(\"%d %d\\n\
}
执行后输出结果是______。
A、1 1 B、3 2 C、0 0 D、3 15. 有以下程序
main()
{ unsigned char a=2,b=4,c=5,d;
d=a|b; d&=c; printf(\"%d\\n\
}
程序运行后的输出结果是______。
A、3 B、4 C、5 D、6
填空题:
1
二、填空题:
1、与表达式a&=b等价的另一种书写形式是__ a=a&b ______。
2、请读程序片段:
int a=1,b=2;
if(a&b) printf(“***\\n”);
else printf(“$$$\\n”);
以上程序片段的输出结果是__$$$______。
3、请读程序片段:
int a=-1;
a=a|0377;
printf(“%d,%o\\n”,a,a);
以上程序片段的输出结果是__-1,177777______。
4、请读程序片段
int m=20,n=025;
if(m^n) printf(“mmm\\n”);
else printf(“nnn\\n”);
以上程序片段的输出结果是__ mmm ______。
5、请读程序片段:
int x=1;
printf(“%d\\n”,~x);
以上程序片段的输出结果是__-2______。
6、以下程序的运行结果是__ a:9a,b:ff65______。
main()
{
unsigned a,b;
a=0x9a;
b=~a;
printf(“a:%x,b:%x\\n”,a,b);
}
7、以下程序的运行结果是__-2,62______。
main()
{
char a=-8;unsigned char b=248;
printf(“%d,%d”,a>>2,b>>2);
}
8、以下程序的运行结果是__0x6c ______。
main()
{
unsigned char a,b;
a=0x1b;
printf(“%0x%x\\n”,b=a<<2);
}
9、若x=0123,则表达式(5+(int)(x))&(~2)的值是__0130或88或0x58______。
10、以下程序的运行结果是___ x=11,y=17,z=11_____。
main()
{
unsigned char a,b;
a=0x9d;
b=0xa5;
printf(“a AND b:%x,”,a&b);
printf(“a OR b:%x,”,a|b);
printf(“a NOR b:%x\\n”,a^b);
}
11、设int b=2; 表达式(b<<2)/(b>>1)的值是(8)。
12、以下程序的输出结果是(100)
main()
{int x=040;
printf(“%o”, x<<1);
}
编程题
1、取一个整数a从右端开始的4~9位。main()
{
unsigned a,b,c,d;
scanf(\"%o\
位号从0开始,例如:16位数位0-15位;]。 [
b=a>>4;
c=~(~0<<6);
d=b&c;
printf(\"%o,%d\\n%o,%d\\n\
}
2、从键盘上输入一个正整数给整型变量a,按二进制位输出该数。
#includemain()
{
int a,b,i;
printf(\"请输入一个整型数:\");
scanf(\"%d\
b=1<<15; /*构造一个最高位为 1、其余各位为0的整数*/
printf(\"%d=\
for(i=1;i<=16;i++)
{
putchar(a&b?'1':'0'); /*输出最高位的值(1/0)*/
a<<=1; /*将次高位移到最高位上*/
if(i%4==0) putchar(','); /*四位一组用逗号分开*/
}
printf(\"\\bB\\n\");
}
3、 将十六进制数转换成二进制
人们有时希望知道某个十六进制数的二进制数是什么?但是C语言的printf函数只提供十六进制、十进制、八进制形式的输出而不能直接输出一个整数对应的二进制形式。如果采用人工转换,则肯定会不方便。下面用位运算来实现:
对一个整数num(16位)的每一位进行测试,视其为0还是1。可以设置一个屏蔽字与该数进行与运算,从而取出所需的一个位的状态。从第15位开始,设置屏蔽字为0x8000
(最高位为1,其余各位为0)并将它赋给一个变量mask,计算表达式bit=mask&num?1:0的值,若结果为1,则说明num的第15位为1,否则为0。每次进入下一轮循环时将mask右移一位,循环16次之后,就可以得到结果。
main()
{
int bit, i, num;
unsigned int mask=0x8000;
scanf(“%d”,&num);
for(i=0;i<16;i++)
{
bit=mask&num?1:0;
printf(“%d”,bit);
mask>>=1;
}
}
4、设计一个函数,使得给出的一个数的原码,能得到该数的补码。