C编译器剖析_6.3.5 汇编代码生成_为类型转换产生汇编代码

本文介绍了C编译器UCC在处理类型转换时的汇编代码生成,特别是整型和浮点型之间的转换。转换过程中,UCC会将低于int的整型提升为int,然后进行其他转换。涉及的转换包括整型的符号位扩展、截断,以及浮点数与整数间的转换,这些转换主要通过x87协处理器完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6.3.5  为类型转换产生汇编代码

    在这一小节中,我们来讨论一下整型和浮点型之间的类型转换。有些类型转换并不需要在汇编层次进行数据转换,例如int和unsigned  int之间的转换只是改变了表达式的类型,对数据本身并无影响,以下表达式“(unsigned int) a”对应的二进制数据为0xFFFFFFFF,而表达式“a”对应的二进制数据也为0xFFFFFFFF。但对相同内容的二进制数据来说,进行“有符号整数的右移”和“无符号整数的右移”的结果是不一样的。换言之,对于int和unsigned  int之间的转换,我们只要在语义检查时,保存转型后的新类型即可,由于其数据本身并没有发生变化,我们不需要产生任何进行数据格式转换的汇编代码。

         int   a = -1;

         unsigned  int  b;

         b = ((unsigned int) a)>> 30;      //b为3

         b = a >> 30;                      //b为0xFFFFFFFF   

    还有一点需要注意的是,UCC编译器总是把低于int的整型先隐式地提升为int,然后再进行其他转换。如下所示,当要进行“short-- > char”的转换时,我们会以int作为中转,实际进行的转换为“short -- > int -- > char”。

         short  s = 3;

         char  c=(char)s;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值