首先说明一下什么是自动类型转换:
在计算机上进行运算时,内存上的数据一旦被储存在寄存器中(通常为int的大小),小于int的字节数的数据将被扩 展成int的字节数长度。该部分既是称为「自动类型转换」的C语言规格。
根据规格,两边都是带符号的数值的情况下。
若一方为long double型,则需将另一方转换为long double型
否则、若一方为double,则需将另一方转换为double型
否则、若一方为float型,则需将另一方转换为float型
否则、将char型和short型转换为int型
有符号
si8_t c;
c = 0xff;
id(c == 0xff){ //假
}
在进行[c == 0xff]比较时,左边的c 8字节整数因发生了自动类型转换,转换位Int型。带符号的整数转换位更大字节长度的类型时,符号位不变,对符号位进行扩展,即发生以下变化:
1(符号位) | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
------------->
1(符号位) | 1(按照符号 |