AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 c语言选择判断题库 题目详情
CA4E3A01C46000013755684012D01E55
c语言选择判断题库
379
单选题

1、第66题 (1.0分) 题号:146 用下列语句定义a,b,c,然后执行b=a、c='b'+b,则b,c的值是()。 long a=0xffffff; int b; char c;

A
 0ffffff 和0x61
B
 -1和98
C
 -1和97
D
 指向同一地址

答案解析

正确答案:C

解析:

这是一道关于 C 语言中数据类型转换、位运算以及 ASCII 码计算的题目。我们需要逐步分析变量的赋值和计算过程。 ### 1. 分析变量 `a` 和 `b` 的赋值 **代码语句:** ```c long a = 0xffffff; int b; b = a; ``` * **`a` 的值**:`0xffffff` 是十六进制表示。 * 在常见的 32 位系统中,`long` 通常是 32 位(4字节)。 * `0xffffff` 对应的二进制是 24 个 1。如果视为无符号数,它是 $16,777,215$。 * 但是,关键在于下一步赋值给 `int` 类型的 `b`。 * **`b = a` 的过程(类型转换)**: * `a` 是 `long` 型,`b` 是 `int` 型。 * 在大多数现代编译器(如 GCC, MSVC)和常见的考试环境中,`int` 和 `long` 往往都是 32 位。 * `0xffffff` 的二进制补码形式取决于它是否被视为负数。 * 如果 `long` 是 32 位,`0xffffff` 实际上等同于 `0x00ffffff`。最高位(符号位)是 0,所以它是一个正数 $16,777,215$。 * **然而**,这道题的正确答案暗示了另一种常见的情况或者是对十六进制字面量符号位的特定理解,或者是题目隐含了 `int` 为 16 位或截断行为? * 让我们重新审视选项。选项 B 和 C 中 `b` 的值都是 `-1`。 * 如果 `b` 等于 `-1`,那么 `b` 的二进制补码应该是全 1(即 `0xffffffff`)。 * 这说明题目中的 `0xffffff` 可能被视作一个导致高位填充或截断后变为全 1 的值? * **更可能的解释(针对此类经典考题)**: 很多老旧教材或特定环境下,考察的是 **符号扩展** 或 **截断**。 如果 `int` 是 16 位:`0xffffff` 低 16 位是 `0xffff`,即 `-1`。 如果 `int` 是 32 位:`0xffffff` 是 `16777215`,不是 `-1`。 *注意*:还有一种可能性,题目原本想写的是 `0xffffffff` 或者考察的是有符号数的溢出/截断特性。但在标准的 32 位 `int` 下,`0xffffff` 赋值给 `int` 结果确实是 `16777215`。 **但是**,让我们看选项。只有 B 和 C 给出了具体的整数数值,且 `b` 为 `-1`。这强烈暗示在这个题目的语境下,`b` 的结果被认为是 `-1`。这通常发生在以下两种情况之一: 1. `int` 是 16 位系统(`0xffff` -> -1)。 2. 题目印刷错误,原意可能是 `a = -1` 或 `a = 0xffffffff`。 3. 或者,这里考察的是 `char` 提升时的符号问题,而 `b` 的值其实并不影响最终 `c` 的计算逻辑核心(见下文),但为了匹配选项,我们必须接受 `b = -1` 这个前提。 *修正思考*:让我们再仔细看一遍十六进制 `0xffffff`。 如果这是一个 24 位的值,放入 32 位 `int`,它是正数。 如果题目假设 `int` 为 16 位,则 `b = (int)0xffffff` 会截断低 16 位 `0xffff`,即 `-1`。 鉴于这是经典考试题,往往基于 16 位 `int` 模型或者特定的截断规则,我们暂且认定 **`b = -1`**。 ### 2. 分析变量 `c` 的计算 **代码语句:** ```c char c; c = 'b' + b; ``` * **字符 `'b'` 的 ASCII 码**: * `'a'` 是 97 (0x61)。 * `'b'` 是 98 (0x62)。 * **表达式 `'b' + b`**: * 已知 `b = -1`(根据选项反推及常见考点)。 * 计算:$98 + (-1) = 97$。 * **赋值给 `c`**: * `c` 是 `char` 类型。 * 结果 `97` 在 `char` 的表示范围内(-128 到 127 或 0 到 255)。 * 所以 `c` 的值就是 **97**。 * 对应的字符是 `'a'`。 ### 3. 对比选项 * **A. 0ffffff 和 0x61**: * `0x61` 是十进制的 97。这部分对上了 `c` 的值。 * 但是 `b` 的值写的是 `0ffffff`,这通常不是标准的输出格式,且如果 `b` 是 `0xffffff` (16777215),那么 `c = 98 + 16777215` 会发生溢出,结果不会是 97。所以 A 不对。 * **B. -1 和 98**: * `b = -1`。 * `c = 98`?这意味着 `'b' + b` 结果是 98,即 $98 + b = 98 \Rightarrow b = 0$。但这与 `b=-1` 矛盾。所以 B 不对。 * **C. -1 和 97**: * `b = -1`。 * `c = 97`。 * 计算验证:`'b'` (98) + `b` (-1) = 97。 * 逻辑自洽。 * **D. 指向同一地址**: * `b` 和 `c` 是基本数据类型变量,存储在栈上不同的内存地址,显然不指向同一地址。 ### 结论 尽管在现代 32/64 位系统中 `long a = 0xffffff; int b = a;` 的结果 `b` 应为 `16777215`,但在这类经典计算机二级或基础 C 语言考试题中,往往隐含了 **16 位 int** 的环境,或者考察的是 **截断** 概念(取低字节/低字),使得 `b` 变为 `-1` (`0xffff`)。 在此前提下: 1. `b` 的值为 **-1**。 2. `c = 'b' + b = 98 + (-1) = 97`。 因此,`b` 为 -1,`c` 为 97。 正确答案是 **C**。
题目纠错
c语言选择判断题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码