第一题 (做错了)
1、请阅读以下程序,其运行结果是( )
int main() { char c='A'; if('0'<=c<='9') printf("YES"); else printf("NO"); return 0; }
A: YES
B: NO
C: YESNO
D: 语句错误
答案及解析 A
0'<=c<='9'并非判断x大于等于字符0,小于等于字符9
而是先执行'0'<=c,使用这个表达式的结果再和'9'比较
'0'的ASCII码值是48,'A'的ASCII码值是'65',故'0'
1无疑是小于字符'9'的,最终是真
第二题
2、假设编译器规定 int 和 short 类型长度分别为32位和16位,若有下列C语言语句,则 y 的机器数为( )
unsigned short x = 65530; unsigned int y = x;
A: 0000 7FFA
B: 0000 FFFA
C: FFFF 7FFA
D: FFFF FFFA
答案及解析 B
unsigned short类型的x变量2个字节保存了65530,十六进制形式为0xFFFA,x给y赋值时会整型提升,而无符号数在提升时高位补0,其实就相当于把x的值放在了y的低的两个字节空间上,所以y的十六进制表示为0000 FFFA
第三题
3、下列程序的输出结果是什么( )
#include<stdio.h> int main() { int n = 1001; int ans = 0; for(int i = 1; i <= n; ++i) { ans ^= i % 3; } printf("%d",ans); return 0; }
A: -2
B: 0
C: 1
D: 2
答案及解析 B
i % 3 的值按1、2、0循环,可推算出ans按1、3、3、2、0、0循环,循环进行1001次,而1001%6=5,也就是ans按规律得到的第5个数为最终结果,故ans=0
第四题
4、C 语言中,下列运算符优先级最高的是 ( )
A: !
B: %
C: >>
D: ==
答案及解析 A
对优先级不了解的可以看我的这个博客http://t.csdnimg.cn/KtoX1
第五题
5、要使 a 的低四位翻转,需要进行操作是( )
A: a | 0xF
B: a & 0xF
C: a ^ 0xF
D: ~a
答案及解析 C
十六进制数0xF是1111,参与运算时整型提升,高位都是0。
所以0xF二提升后进制就是0000 0000 0000 0000 0000 0000 0000 1111
低四位和1异或,0^1是1,1^1是0;高位和0异或,0^0是0,1^0是1。
故而可以通过异或F使得a的低四位翻转,并保持高位不变