C语言无符号数据与有符号数据加法运算
创作时间:
作者:
@小白创作中心
C语言无符号数据与有符号数据加法运算
引用
CSDN
1.
https://m.blog.csdn.net/qq_17033619/article/details/145064762
以下是一个常常用来测验C语言水平的题目,这个代码考点也算是有几个,很多人知道答案,但可能忽略了出题人的目的,理解上也出现了偏差,没有明白其中规则。
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) ? puts("> 6") : puts("<= 6");
}
1. 这道题的答案是什么?
> 6
2. 这道题的考点有什么?
2.1. 考点一:C语言类型转换规则。
- 涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别。
- 类型的级别从高至低依次是long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int、int。
当你知道这两个规则时,a+b是否大于6答案就直接出来了,基本上可以不需要做计算。
网络上的答案会这么分析:
“有符号数和无符号数进行运算时,有符号数隐式转换成了无符号数(即底层的补码不变,但是此数从有符号数变成了无符号数),比如上面 (a+b)>6这个比较运算,a+b=-14,-14的补码为1111111111110010。此数进行比较运算时,被当成了无符号数,它远远大于6,所以得到上述结果。” 这么分析我不能说他是错的,原理没错,但这没有直击考点。
2.2. 考点二:类型关键字,用于确定存储在某位的信息类型或数据类型。类型准换并不会改变数据存储,只是告诉计算机应该怎么去解释这段内存的数据。
某个负整数和某个正整数在内存中的值可能是一样的,比如-20和65516。
2.3.考点三:三目/元运算符
C提供条件表达式(conditional expression)作为表达if else语句的一种便捷方式,该表达式使用?:条件运算符。该运算符分为两部分,需要 3 个运算对象。回忆一下,带一个运算对象的运算符称为一元运算符,带两个运算对象的运算符称为二元运算符。以此类推,带 3 个运算对象的运算符称为三元运算符。条件运算符是C语言中唯一的三元运算符。
条件表达式的通用形式如下:
expression1 ? expression2 : expression3
如果 expression1 为真(非 0),那么整个条件表达式的值与 expression2的值相同;如果expression1为假(0),那么整个条件表达式的值与expression3的值相同。
总结
只要掌握以上三个考点。下一次我们再看到类似的题,就可以一眼一秒过了。
热门推荐
揭秘古代皇后的真实权力:从政治合伙人到皇家打工人
使用RVC变声器时需要注意什么?
波立维与阿司匹林:抗血小板药物的副作用对比
从预防到预测:自动化设备维护策略与实践指南
手动到电动:四种主要铆接工艺详解
数字化扭力检测仪:精准控制螺栓预紧力的工业利器
轨道列车螺栓预紧力计算:四大因素影响安全运行
徽州千年宗谱入选世界记忆名录,展现中华谱牒文化
现代农业科技的核心驱动力——揭秘智能技术如何改变农田面貌
250亿斤!“冰城粮”给粮食安全“压舱石”添分量
高标准农田信息化解决方案:让每一寸土地都发挥最大价值
设施农业+高附加值农产品,会碰撞出什么火花
白帝城瞿塘峡:三国古迹与长江奇观的完美融合
瞿塘峡:天下雄关里的自然与人文交响
三峡之巅瞿塘峡一日游,你去过吗?
李元芳担任的“千牛卫大将军”在唐朝的官职解析
狄仁杰系列八大高手排名:李元芳、元齐、虺文忠谁最强?
脑梗患者营养食谱大公开
新股交易规则大揭秘:主板VS科创板
A股新股上市首周无涨跌停限制,你准备好了吗?
北交所新股上市规则大变,你准备好了吗?
三国志11:从游戏设定的角度来看,周瑜和诸葛亮到底谁更胜一筹?
慢阻肺患者的饮食指南:哪些该吃哪些该忌
扩香石:环保香薰的使用指南及6款创意产品推荐
保肝护胆有良方:熊胆粉功效与人工替代技术
从活熊取胆到人工合成:熊胆粉产业的转型之路
熊胆粉功效与使用全解析:人工合成破解动物保护难题
世界经济论坛:2024年全球性别差距报告
上海城隍庙:一座庙宇见证的城市千年变迁
苏州河畔:自然人文交融的城市生态长廊