源于计算机硬件最自然支持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转换成单精度浮点数