贵妇是什么意思| 杀青原指什么| fazeya是什么牌子| 世界上最长的河流是什么| 均码是什么意思| 什么是结扎| 骨肉瘤是什么病| 说话鼻音重是什么原因| 心律失常是什么意思| 高血压适合做什么运动| 脑供血不足吃什么中成药好| 泄泻什么意思| 苹果煮水有什么功效| 幽门螺杆菌感染吃什么药| 梦见和死去的人说话是什么意思| 五马分尸是什么意思| 尿糖1十是什么意思| 人体消化道中最长的器官是什么| 后背疼去医院挂什么科| 圈名什么意思| 牙龈为什么会肿痛| 拉不出来屎是什么原因| 蜈蚣吃什么| 套马的汉子你威武雄壮是什么歌| 眼睛长黄斑是什么原因| 办理慢性病需要什么手续| 男性裆部瘙痒用什么药好| 风疹病毒是什么意思| 为什么老是拉肚子| 什么是霸凌| 尿少是什么原因| 第一次为什么进不去| 泡沫尿是什么病| 一本万利是什么生肖| 贡菜是什么菜做的| 光脚走路有什么好处| 什么是脑白质病| 肾功能三项检查什么| 娇小是什么意思| 朝三暮四是什么生肖| 你正在干什么用英语怎么说| 成人大便绿色是什么原因| 合胞病毒吃什么药| 轻微骨裂了有什么表现| la是什么牌子| elaine是什么意思| 为什么光吃不拉大便| 胡思乱想是什么意思| 喝什么茶去火| 什么是感情| 手串19颗代表什么意思| 吃什么补身体| 人间四月芳菲尽的尽是什么意思| 整形什么医院好| 什么是喜欢| 吃什么水果补血| 为什么老是咳嗽| 爱像什么| 外阴长水泡是什么原因| lyocell是什么面料| 肱骨头小囊变什么意思| 带状疱疹是什么样的| ggdb是什么牌子| 嗣女是什么意思| 明目张胆是什么生肖| 看破红尘下一句是什么| 衣服最小码是什么字母| 神农架为什么是禁区| 查胃病做什么检查合适| 什么可以美白牙齿| 扁桃体溃疡吃什么药| 小孩反复发烧是什么原因引起的| 诠释的意思是什么| 屎壳郎吃什么| 吃什么消炎| 俗不可耐什么意思| 消肿吃什么食物好| 乙肝15阳性是什么意思| 甲状腺毒症是什么意思| 百合为什么是苦的| 胆结石有什么治疗方法| 一什么火箭| 什么人不能喝石斛| 忽必烈和成吉思汗是什么关系| 不字五行属什么| 废话是什么意思| 尿液黄绿色是什么原因| 脂质是什么| 跟腱炎吃什么药效果好| 烟嗓是什么意思| opo是奶粉里的什么成分| 红薯什么时候传入中国| 大虾炒什么菜好吃| april是什么意思| 螨虫是什么样子的| 嫂嫂是什么意思| 代表什么意思| 什么样的疤痕影响当兵| 胃穿孔是什么症状| 克服是什么意思| 乐哉是什么意思| 肝气郁结吃什么中成药| 每天吃葡萄有什么好处和坏处| 憬五行属什么| mrcp是什么检查| 猫弓背什么意思| 佳什么意思| 广东属于什么地区| 避火图是什么| ol什么意思| 赤小豆和红豆有什么区别| 拔罐的原理是什么| 胃黏膜受损是什么症状| 孕妇多吃什么食物好| 鸟屎掉脸上有什么预兆| 周公吐哺天下归心是什么意思| 一个m是什么品牌| ng是什么意思| 肝炎吃什么药| 梦见和女儿吵架是什么意思| 子宫肌瘤手术后吃什么好| 胖大海是什么| 好学不倦什么意思| 潜质是什么意思| 氨水是什么东西| 一声什么| 白花花的什么| 什么是桑黄| honey什么意思| 什么牌子的洗衣机最好| 尿酸高什么意思| 小分子水是什么水| 皮肤痒用什么药| 不造是什么意思| 心肌酶是检查什么的| 什么叫肠化生| 小孩说话晚是什么原因| 子宫脱垂吃什么药怎么恢复正常| 女人依赖男人说明什么| 隐患是什么意思| 脚凉是什么原因造成的| 截石位是什么意思| 金丝熊吃什么| 蛋白质偏高是什么原因| 淋巴结看什么科| 牙痛吃什么好| 什么季节最短| 917是什么意思| 风湿和类风湿有什么区别| 包裹是什么意思| 腰椎盘突出挂什么科| 神经大条是什么意思| 飞代表什么生肖| 木吉他什么牌子比较好| collection什么牌子| 梦见大鲤鱼是什么征兆| 吃什么放屁多| 绀是什么意思| 高频是什么意思| 守护者是什么意思| 用盐刷牙有什么好处和坏处| a型血rh阳性是什么意思| 扁桃体发炎吃什么药好得快| 生姜什么时候种植最合适| 狗叫是什么意思| 9月3号是什么日子| 高考是什么| 白带黄色是什么原因| 远字五行属什么| 为什么牙龈老是出血| 海带什么人不能吃| 尿酸是什么| 杨玉环属什么生肖| 人嗜睡是什么原因| 氨纶是什么面料优缺点| 什么山| 什么人不能吃人参| 什么的羽毛| 难于上青天是什么意思| 99年的兔是什么命| 脚心痛什么原因| 清酒是什么酒| 梦见海龟是什么意思| 鬼打墙是什么意思| 崴脚挂什么科| 什么蔬菜是温性的| 胰岛素抵抗吃什么药| 什么体质的人戴银变黑| 野趣是什么意思| 什么时候收复台湾| 口里发酸是什么原因| 蛇什么时候蜕皮| 什么是独角兽企业| 什么样的草地| 雪燕有什么功效| 什么是余额宝| 弥漫性病变是什么意思| 产后吃什么水果好| 阴茎硬不起吃什么药| 甲状腺饱满是什么意思| 经期喝什么茶好| 笔记本电脑什么品牌好| 桃花指什么生肖| 男人眼袋大是什么原因造成的| 宫颈糜烂是什么原因引起的| 手心热吃什么药| 手麻了是什么原因| 什么是渎职| 吃什么白细胞升的最快| 月柱金舆是什么意思| 伏特加是什么酒| 教授是什么级别| 首重是什么意思| 伤寒是什么意思| 左手有痣代表什么| 便秘吃什么最快排便小孩| 喝藿香正气水不能吃什么| 绿豆与什么食物相克| 钢琴八级是什么水平| 耳石是什么东西| 救世主是什么意思| prr是什么意思| 土豆与什么食物相克| 濒死感是什么感觉| IB是什么| 疤痕增生挂什么科| kappa是什么牌子| 酒不能和什么一起吃| 早上左眼跳是什么预兆| lsp是什么| 施食是什么意思| 承德有什么大学| 震撼的意思是什么| 左边头疼是什么原因怎么办| 冶阳萎什么药最有效| 咳嗽痰中带血是什么原因| 低回声是什么意思| 三十七岁属什么生肖| 懋是什么意思| 跑业务是什么工作| 败火是什么意思| 泥鳅吃什么| 胃反流吃什么药| 频繁流鼻血是什么病的前兆| 岁月静好什么意思| 为什么会得人工荨麻疹| 小沈阳属什么生肖| 什么是癔病| 择期手术是什么意思| 全身无力吃什么药| 家里进蛇有什么预兆| 玉米淀粉是什么| 老年人爱出汗是什么原因| 什么钓鱼愿者上钩| 属羊的和什么属相不合| 忧虑是什么意思| 怀孕初期不能吃什么| 东北有什么好玩的景点| 铁蛋白高吃什么药能降下来| 骨折吃什么好| 可定是什么药| 眼睛黄是什么病| 梦见小孩是什么意思| 梦见跟别人打架是什么意思| 百度
打印
[麦麦茶水间]

2017年上海漫控博览会现场 魔兽电影人物模型展出

[复制链接]
282|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dffzh|  楼主 | 2025-8-6 16:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创#
@21小跑堂


在介绍C语言的整型提升概念之前,我们先来看一段实际的代码例子和仿真结果。
主要代码如下:
int main()
{
        unsigned char i=0;
        unsigned char temp=0;
        unsigned char dat=0x89;
        unsigned char SER=0;

    printf("===========method 1=============\r\n");
        //方式1
        dat=0x89;
        for(i=0; i<8; i++)
        {
        temp = dat<<i;
                SER = temp>>7;
                printf("%d\r\n", SER);
        }
    printf("===========method 2=============\r\n");
        //方式2
        dat=0x89;
        for(i=0; i<8; i++)
        {
        SER = dat >>7;
                dat<<=1;
                printf("%d\r\n", SER);
        }
        printf("===========method 3=============\r\n");
        //方式3
        dat=0x89;
        for(i=0; i<8; i++)
        {
        SER = (dat<<i)>>7;
                printf("%d\r\n", SER);
        }
        return 0;
}
上面的代码主要是为了实现获取8位无符号数据dat的每一位并写入SER和打印出来,理论上分析似乎都可以实现吧?我们来实际运行看下结果:

但从上面的实际运行结果来看,只有方式1和方式2的结果是符合预期的,方式3的结果为什么是这样的呢?这是为什么呢?估计很多同仁就比较喜欢以这样一步到位的方法实现功能代码。其实在这里,就涉及到了C语言的整型提升的概念。
如果把代码段:
SER = (dat<<i)>>7;
改成:
SER = (unsigned char)(dat<<i)>>7; //显式类型转换 
再运行看下:

这个时候方式3的代码执行结果也符合预期了。
如果再把代码段:
SER = (dat<<i)>>7;
改成:
SER = (unsigned int)(dat<<i)>>7; //显式类型转换
再运行看下:

这个时候就和第一次运行的结果一样了,也是不符合预期的。
然后在KeilMCU中运行的结果也是如此:

通过以上的代码和实测对比,估计很多同仁应该知道了何为整型提升了。
接下来我们就从理论上说一下C语言的整型提升吧,也算是再复习一次。
C语言整型提升(Integer Promotion)的原意是一种隐式类型转换规则,它规定了在表达式中当不同类型的数据进行运算时,较小的整型数据类型会自动转换为较大的整型数据类型。
为什么需要整型提升呢?主要基于下面三个方面的考虑:
效率考虑:CPU通常对int大小的数据操作效率最高;
避免溢出:提升到更大的类型可以减少中间结果溢出的风险;
一致性:确保表达式求值结果的一致性,不受平台差异影响。
那整型提升一般会发生在哪些情况呢?主要包括如下:
当一个表达式中包含比int小的整数类型(如char、short等)时;
在使用位运算符(~、&、|、^)时;
在使用算术运算符(+、-、*、/)时。
提升规则主要如下:
如果原始类型的所有值都可以用int表示,则转换为int;
否则转换为unsignedint。
在代码语句SER= (dat<<i)>>7; 中,涉及了先左移后右移运算,系统按照规则判断dat的最高位是有用的,所以在执行dat<<i时,将dat的最高位保留了。比如dat<<1的值其实变成了unsigned int类型的0000 0001 0001 0010,整个过程通过下图一目了然:

如果在语句前面加了显示类型强制转换unsigned char,则dat<<1变成了0001 0010,再右移7位后,即为0,与预期结果符合。
综上所述,虽然有时候将几条运算语句合并成一条语句执行运算的操作能够精简代码量,但是因为C语言在数据类型转换这块,其实是比较复杂的,对于类似这种多个运算符参与的逻辑运算,分开多条语句实现比全部用一条语句实现更好,不仅代码可读性更强,也不容易出错。如果你确实需要一步到位,那一定要将变量的数据类型定义正确,或者掌握并灵活运用C语言的显式类型转换和隐式类型转换,否则在项目开发上你一定会吃大亏的~~。
因此,理解整型提升对于避免C语言中的一些微妙错误非常重要,特别是在涉及位操作和混合类型运算时。

沙发
xch| | 2025-8-7 11:39 | 只看该作者
我都用浮点运算。

不知道啥提升。

板凳
大大财迷| | 2025-8-7 12:38 | 只看该作者
位移符号的优先级很低,复杂句型中,要合理使用括号。
地板
暗夜幽灵骑士| | 2025-8-7 15:24 | 只看该作者
非常实用的分享!整型提升确实是C语言中一个容易忽视但又非常重要的概念。通过你的代码示例和解释,我对整型提升的理解更加深刻了。谢谢你的分享!
5
穷得响叮当侠| | 2025-8-7 20:24 | 只看该作者
整型提升确实是C语言中一个重要的概念,特别是在进行位操作时。这篇文章通过实际代码示例,很好地说明了整型提升的影响和重要性。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

1135

帖子

22

粉丝
姓许的女孩取什么名字好听 掉头发吃什么药最有效 湿化瓶内放什么水 樱桃和车厘子有什么区别 papi是什么意思
蓝灰色配什么颜色好看 小脑萎缩吃什么药好 起眼屎是什么原因 87年属什么的生肖 九月二十六是什么星座
吹空调嗓子疼吃什么药 小别胜新婚是什么意思 羊水是什么味道 高姿属于什么档次 帕金森吃什么药最好
什么辉煌四字词语 他叫什么名字 芈月和秦始皇什么关系 低血压不能吃什么食物 妍字属于五行属什么
梦见男朋友是什么意思hcv9jop7ns5r.cn 什么是义务兵hcv8jop3ns8r.cn 喝酒过敏是什么原因onlinewuye.com 氯化钾是什么东西hcv9jop4ns0r.cn 咖啡对心脏有什么影响hcv9jop0ns3r.cn
梦见下小雨是什么征兆hcv9jop5ns3r.cn 农历8月15是什么节日hcv8jop5ns0r.cn 微恶风寒是什么意思hcv8jop6ns6r.cn 小肝癌是什么意思hcv8jop1ns9r.cn 什么东西不能一起吃0735v.com
小产吃什么好恢复营养hcv7jop6ns9r.cn 唱过什么歌hcv8jop0ns8r.cn 蚊子怕什么颜色hcv7jop7ns1r.cn 人突然晕倒是什么原因引起的hebeidezhi.com 用牛奶敷脸有什么好处和坏处hcv9jop2ns5r.cn
省纪委副书记是什么级别hcv8jop6ns4r.cn gift什么意思hcv7jop5ns4r.cn 牙黄是什么原因引起的hcv7jop6ns0r.cn 今年88岁属什么生肖hcv8jop5ns4r.cn 梦见猫头鹰是什么预兆inbungee.com
百度