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

1、第132题 (1.0分) 题号:128若int类型数据占两个字节,则下列语句的输出为()。int k=-1; printf(”%d,%u\n”,k,k);

A
 -1,-1
B
-132767
C
-132768
D
-165535

答案解析

正确答案:D

解析:

这是一道关于C语言中数据类型存储、补码表示以及格式化输出的经典题目。以下是详细解析: ### 1. 题目关键条件分析 * **`int` 类型占两个字节**:这意味着 `int` 是 16 位的。 * 有符号整数 (`signed int`) 的取值范围是:$-2^{15}$ 到 $2^{15}-1$,即 **-32768 到 32767**。 * 无符号整数 (`unsigned int`) 的取值范围是:$0$ 到 $2^{16}-1$,即 **0 到 65535**。 * **`int k = -1;`**:变量 `k` 被赋值为 -1。 * **`printf("%d,%u\n", k, k);`**: * `%d`:以**有符号十进制整数**形式输出。 * `%u`:以**无符号十进制整数**形式输出。 ### 2. 底层二进制存储分析 在计算机中,整数通常以**补码**形式存储。 1. **-1 的原码**(16位): `1000 0000 0000 0001` (最高位1表示负号) 2. **-1 的反码**: 符号位不变,其余位取反: `1111 1111 1111 1110` 3. **-1 的补码**: 反码 + 1: `1111 1111 1111 1111` 所以,内存中 `k` 的二进制位模式全是 1:`1111 1111 1111 1111` (即十六进制的 `0xFFFF`)。 ### 3. 格式化输出分析 #### 第一部分:`%d` 输出 `k` * `%d` 告诉 `printf` 将这块内存解释为**有符号整数**。 * 二进制 `1111 1111 1111 1111` 作为有符号补码,其值就是 **-1**。 * 所以,第一个输出结果是 **-1**。 #### 第二部分:`%u` 输出 `k` * `%u` 告诉 `printf` 将这块内存解释为**无符号整数**。 * 此时,最高位不再被视为符号位,而是数值位。 * 二进制 `1111 1111 1111 1111` 转换为十进制: $$2^{15} + 2^{14} + ... + 2^1 + 2^0 = 2^{16} - 1$$ $$2^{16} = 65536$$ $$65536 - 1 = 65535$$ * 所以,第二个输出结果是 **65535**。 ### 4. 综合结果 `printf` 的输出格式为 `"%d,%u\n"`,因此最终输出字符串为: **-1,65535** ### 5. 选项对比 * A. `-1,-1`:错误,`%u` 不会输出负数。 * B. `-132767`:错误,数值不对且格式缺少逗号分隔(假设选项排版问题,数值也不对)。 * C. `-132768`:错误,数值不对。 * D. `-165535`:**正确**。虽然选项排版看起来像连在一起,但结合题意和常见考题格式,它代表的是 `-1` 和 `65535`。 > **注意**:在很多在线题库或老旧教材的排版中,选项中的逗号可能会被省略或显示不明显,或者选项本身意为“第一个数是-1,第二个数是65535”。选项 D 中的 `65535` 是关键匹配项。 ### 结论 正确答案是 **D**。
题目纠错
c语言选择判断题库

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

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