第 1 题
🎗 -27 在内存中的存储形式是以下哪一种 ___
A. 0001 1011
B. 1110 0100
C. 1110 0101
D. 1010 0111
📝 分析:
数据在内存中是以二进制的形式进行存储的,二进制有 3 种表示形式:原码、反码、补码,且在内存中存储的是补码,且有正负数之分 —— 如果为正,高位为0;如果为负,高位为1
1️⃣ 正数的原码、反码、补码相同
2️⃣ 负数:
原码 —— 根据数值直接写出它的二进制序列
反码 —— 原码的符号位不变,其它位按位取反
补码 —— 反码+1
所以选择 C 选项
第 2 题
🎗若有以下定义和语句,则选项中错误的语句是 ____
int a = 4,b = 3,*p,*q,*w; p = &a; q = &b; w = q; q = NULL;
A. *q = 0
B. w != p
C. *p = a
D. *w = b
📝 分析:
所以选择 A 选项
第 3 题
🎗执行以下程序,输出结果为 _____
#include<stdio.h> #include<math.h> #define POWER(x, y) pow(x, y)*y #define ONE 1 #define SELEVE_ADD(x) ++x main() { int x = 2; printf("%f\n", POWER(SELEVE ADD(x), ONE + 1)); }
📝 分析:
此题考查的是宏替换,一定记住宏替换是在预处理阶段完成的,而预处理阶段不会计算,如果计算了那么你和编译器计算的结果可能不同
还要注意的是这里以 %f 输出是匹配的,因为 pow 函数的返回值是浮点型的。之前豌豆在这就被误导了,还扯到链式访问去了
所以输出结果是 10.000000
第 4 题
🎗执行以下程序,输出结果为 _____
int fun(int x) { int count = 0; while(x){ count++; x = x & (x-1); } return count; } int main() { printf("fun(2017)=%d\n",fun(2019)); }
📝 分析:
所以 count = 8
第 5 题
🎗执行以下程序,输出结果为 _____
#define CIR(r) r*r void main() { int a = 1; int b = 2; int t; t = CIR(a + b); printf("%d\n", t); return; }
📝 分析:
根据宏替换原则可得出以下执行过程
所以输出结果为 5
第 6 题
🎗下面的代码中,函数 Test 执行完毕后,打印的结果是 _____
unsigned long g_ulGlobal = 0; void GlobalInit(unsigned long ulArg) { ulArg = 0x01; return; } void Test() { GlobalInit(g_ulGlobal); printf("%lu", g_ulGlobal); return; }
📝 分析:
这里考查的就是值传递和址传递,所以 g_ulGlobal 还是 0
第 7 题
🎗以下程序的运行结果是 _____
int fun(int a,int b) { if(a>b) return(a+b); else return(a-b); } int main() { int x = 3, y = 8, z = 6, r; r = fun (fun(x,y), 2 * z); printf("%d\n",r); return 0; }
A. -48
B. 58
C. -58
D. -17
📝 分析:
先执行内层 fun(x, y) -> fun(3, 8) 得到 -5
再执行外层 fun(x, y) -> fun(-5, 12) 得到 -17
所以选择 D 选项
第 8 题
🎗 一个 8 位的二进制整数,采用补码表示,且由 3 个 “1” 和 5 个 “0” 组成,则最小值为 ____
A. -127
B. -32
C. -125
D. -3
📝 分析:
根据题意我们可以得出二进制
100000111
求原码得
-125
所以最小值是 C 选项
第 9 题
🎗 int a = 4 , 则对于表达式 ++(a++) 的结果说法正确的是 ____
A. 5
B. 6
C. 7
D. 以上不都是
📝 分析:
++ 或 - - 是单目运算符,只能作用于一个变量,而 (a++) 是一个表达式,类似于 ++(2 + 3),编译器都会报错
所以选择 D 选项
第 10 题
🎗 以下程序的运行结果是 _____
int main() { char ch = 0xff; int i = 0xff; if(ch == i) { printf("相同\n"); } else { printf("不相同\n"); } return 0; }
A. 相同
B. 不相同
📝 分析:
这里主要考查隐式类型转换
当比较的两个数类型不相同时,会有整型提升
所以 ch 应该提升为整型 11111111 11111111 11111111 11111111
i 不用整形提升 00000000 00000000 1111111 11111111
所以选择 B 选项
❓ 这里 ch 的提升是把 ch 变成 int 吗 ❔
并不是,而是生成一个临时变量 int