408真题解析-2009-12-计组-C语言整型提升-补码运算

一 真题2009-12

12 一个C语言程序在一台32位机器上运行。程序中定义了三个变量x,y和z,其中x和z 为int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,x,y和z的值分别是()。

A. x = 0000007FH, y = FFF9H, z = 00000076H

B. x = 0000007FH, y = FFF9H, z = FFFF0076H

C. x = 0000007FH, y = FFF7H, z = FFFF0076H

A. x = 0000007FH, y = FFF7H, z = 00000076H

二 读题

根据C语言整数类型,以及c 语言整数运算结果,推算变量的十六进制表达式。

三 哔哔详解

3.1 计算x

C语言中 int 型 32位,x=127,故二进制表达式0000 0000 0000 0000 0000 0000 0111 1111,十六进制0000007FH;

3.2 计算y

C语言中 short 型16位,y=-9,负数用补码表示;

3.2.1 计算-9 的16位补码

9的二进制0000 0000 0000 1001,按位取反加1 得-9 补码 1111 1111 1111 0111 转为十六进制FFF7H;

3.3 计算z

3.3.1 方法1 先计算出十进制,然后转为十六进制

z=127-9=118

118 二进制 0000 0000 0000 0000 0000 0000 0111 0110 十六进制 00000076H

3.3.2 方法2 二进制计算,在转为十六进制

3.3.2.1 符号为扩展

C语言中int 类型和short 类型运算时,short 型会在运算时扩展为int 型

1111 1111 1111 0111 进行符号扩展 ,符号位是1,扩展到32位,高位补1 即变为1111 1111 1111 1111 1111 1111 1111 0111

3.3.2.2 二进制相加
复制代码
  0000 0000 0000 0000 0000 0000 0111 1111
+ 1111 1111 1111 1111 1111 1111 1111 0111
-----------------------------------------
= 0000 0000 0000 0000 0000 0000 0111 0110

再转为十六进制 得 00000076H

四 参考答案

参考答案 D

五 考点精析

5.1 整型提升(Integer Promotion)

  • C 语言规定:在表达式中,charshort 等小于 int 的类型会自动提升为 int
  • 提升时:有符号类型进行符号扩展,无符号进行零扩展

5.2 补码表示与符号扩展

  • 负数用补码存储
  • 扩展位数时,符号位复制到高位

5.3 C 语言中的"整型提升"是临时的、仅用于表达式计算

short 型变量 a 与 int 型 变量b 运算,在运算时临时提升为int 型,但是存储时 仍是short 型。

六 考点跟踪

暂无

说明 :本文内容基于公开资料整理,参考了包括但不限于《数据结构》(严蔚敏)、《计算机操作系统》(汤小丹)、《计算机网络》(谢希仁)、《计算机组成原理》(唐朔飞)等国内高校经典教材,以及其他国际权威著作。同时,借鉴了王道、天勤、启航等机构出版的计算机专业考研辅导系列丛书 中的知识体系框架与典型题型分析思路。文中所有观点、例题解析及文字表述均为作者结合自身理解进行的归纳与重述,未直接复制任何出版物原文。内容仅用于学习交流,若有引用不当或疏漏之处,敬请指正。

相关推荐
油丶酸萝卜别吃28 分钟前
utils.js 说明文档
开发语言·javascript·ecmascript
leisoo80973 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴4 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
捷瑞电子工坊5 小时前
嵌入式秋招面经:5大核心模块高频考题与实战避坑总结
c语言·stm32·嵌入式工程师·rtos·通信协议·嵌入式面试
一只旭宝5 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
天空'之城6 小时前
C 语言工业级通用组件手写 30:安全内存拷贝组件
c语言·内存拷贝·工业级组件·安全内存操作
coder!mq7 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding7 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ7 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio
LuminousCPP7 小时前
数据结构-双向循环链表
c语言·数据结构·笔记·链表