奇思妙想 · 2024年 4月 22日 0

为什么两个操作数的一个是char/short或者枚举类型,会自动转换成int类型?

18 次浏览

源于计算机硬件最自然支持int类型(一般而言),int类型大小和硬件常用寄存器大小相同(64位系统有所不同)。一个小于int长度的数值,就算在硬件寄存器里面,最自然也是int长度,那就不如用int来计算,避免中间各种裁剪导致额外性能消耗。
以字符和浮点数的加法为例:

        char c;

        float f;

        f = f + c; // c在和f相加之前会先放入eax, 再转换成单精度浮点数

  • movsx   eax, BYTE PTR [rbp-5] ;字符c扩展成4字节放进eax中
  • cvtsi2ss        xmm0, eax ; eax转换成单精度浮点数