今天看到了一个比较有意思的C语言题目,看似简单,但里面的几个陷阱和考察的知识点比较有代表性,拿出来与大家分享一下:

请输入图片描述

问题很简单,就问会输出什么?大家可以先自己思考一下,我们就直接给出运行结果了:

请输入图片描述

是不是很奇怪,怎么会出现了255,-1是没问题的。别急,下面我们一步一步分析:

先来分析a和b的值:

我们首先要明白的是,在计算机中整数通常采取补码的形式存储负数的补码等于其反码+1,负数的反码符号位不变,数值 ​按位取反。对于 signed char 型变量,大部分C语言编译器都是由 8 个 bit 组成的,最高一个 bit 通常表示符号位。

再来分析 c 和 d 的值:

按理说,a 和 b 在内存中的布局是一样的,都是 8 个 bit 的 1,为什么传递给 c 和 d 就不一样了呢?其实C语言在处理 c = a; 和 d = b; 这两句赋值语句时,有一个过程没有显式的表现出来,即 “整形提升”。以 c=a; 为例,因为 c 和 a 的数据类型不同,所以C语言在处理赋值时,为了不丢失精度,会将 a 中的数值也强制转换为 int 型。

a 中的数值是 -1,提升为 int 型后依然是 -1,而不是 0x000000ff(255,这里假设 int 类型占用 4 字节内存空间)。至于变量 d 的值,就更简单了,就是简单的赋值而已。

怎么样,到这里大家应该都清楚了,其实这道题目主要涉及了整数存储方式(补码反码)和整形提升(无符号数和有符号数)两个知识点,都属于C编程中的基本功,希望此题对大家有帮助,感谢耐心阅读!

隶属编程:C++写的一个好玩的猜数字游戏​zhuanlan.zhihu.com

字节通常用英文单词bit来表示_又是一个看似简单但易错的C语言试题,来试一下?...相关推荐

  1. 64位 int 占几个字节_面试常考,项目易错,长文详解C/C++中的字节对齐

    面试常考,项目易错,长文详解C/C++中的字节对齐​mp.weixin.qq.com 引入主题,看代码 我们先来看看以下程序 //编译器:https://tool.lu/coderunner/ //来 ...

  2. @entity 不限字节长度的类型_面试常考,项目易错,长文详解C/C++中的字节对齐...

    面试常考,项目易错,长文详解C/C++中的字节对齐​mp.weixin.qq.com 引入主题,看代码 我们先来看看以下程序 //编译器:https://tool.lu/coderunner/ //来 ...

  3. 字节通常用英文单词bit来表示_字节跳动为什么有字节2个字,因为程序的真谛:字节...

    一.字节是什么 你知道字节跳动为什么取名叫字节跳动吗,因为字节是程序的真谛! 字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符单位,一个 ...

  4. 位地址和字节地址换算_面试常考,项目易错,长文详解C/C++中的字节对齐

    (给CPP开发者加星标,提升C/C++技能) 作者:技术让梦想更伟大 / 李肖遥 (本文来自作者投稿) 我们先来看看以下程序 //编译器:https://tool.lu/coderunner///来源 ...

  5. api质量等级_第1150期 简单又易操作的辨别润滑油质量的方法

    导读 不少车主都对机油保养存在一定的纠结,因为4s店保质价太高,街边店价低不保质.机油行业水太深,众多在售机油品质良莠不齐,假机油.换牌油.利用劣质机油以次充好等等.学会辨别真假机油难度并不大,难以判 ...

  6. java 山寨qq源代码_求一个山寨qq的源代码,要java语言的~谢谢

    展开全部 简单得很的那种要不要?就像用来应对考试一样.import java.io.*; import java.net.*; import java.util.*; public class Cha ...

  7. 用java汽车美容店管理系统_洗车店 一个较为简单的洗车店管理系统 联合开发网 - pudn.com...

    201716010311%2B王杰%2B数据库课设, 0 , 2020-01-01 201716010311%2B王杰%2B数据库课设\201716010311%2B王杰%2B源代码, 0 , 201 ...

  8. 怎么准确显示一个大于longlong的数_又是一个“暖冬”!冷冬、暖冬到底谁说了算?...

    国家气候中心监测资料显示,刚刚过去的2019/2020年冬季(2019年12月1日-2020年2月29日)暖湿气候显著,全国冬季气温为历史同期第五高,降水量为历史同期第五多. 而且预计,今年春季全国大 ...

  9. 简单的五子棋java代码_求一个最简单的JAVA五子棋程序。。

    展开全部 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt ...

最新文章

  1. Maven学习——安装与修改Maven的本地仓库路径
  2. Java线程池 源码分析
  3. OpenCV Image Pyramids影像金字塔
  4. linux系统下top命令的详细用法、参数详解、以及模式配置
  5. 原生Js_实现广告弹窗
  6. 怎样安装python在桌面_在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程...
  7. JavaFX 2 GameTutorial第1部分
  8. 前端学习(3294):effect hook
  9. 中缀表达式转换为前缀或后缀表达式的手工做法
  10. leetcode - 120. 三角形最小路径和
  11. js中字符串全部替换函数(正则表达式)
  12. hibernate 执行存储过程 方法
  13. tcp三次握手和在局域网中使用 awl伪装MAC地址进行多线程SYN攻击
  14. 【优化覆盖】基于matlab GUI粒子群算法求解传感器覆盖优化问题【含Matlab源码 709期】
  15. socket通信需要网线连接吗_socket方式实现网络通信
  16. 用1000W破解字典破解pdf文档(提供1000W破解字典)
  17. android studio必须装c盘吗,Android Studio不占用c盘配置
  18. project之任务计划(任务之间的依赖关系)
  19. ye321片库_jQuery的简约幻灯片库
  20. 3310复刻版 java_诺基亚3310复刻版评测:经典回归 情怀满满

热门文章

  1. oracle null 值,细说Oracle中NULL值
  2. 独家揭晓:阿里、腾讯、百度的薪资与职级体系
  3. 说说自己对nofollow标签的一些看法
  4. 由对称性知定点一定在x轴上_高考数学易犯的72个低级错误,一定要避开!
  5. Tensorflow系列 | Tensorflow从入门到精通(二):附代码实战
  6. centos7 centos-home 磁盘空间转移至centos-root下
  7. 键盘输入一个英制的身高(几英尺几英寸),计算对应的公制身高(米)
  8. JavaScript基本数据类型及类型检测
  9. leetcode系列-383.赎金信
  10. QML实现程序退出确认功能