我很难以我容易理解的方式找到关于这个主题的信息,所以我要求对我发现的内容进行审查。这完全是关于转换和转换的。
在示例中,我将参考:
(signed/unsigned) int bigger;
(signed/unsigned) char smaller;
截断整数。(更大->更小)
- 首先在MSB端截断 以匹配大小。
bigger
smaller
- 其次,根据较小的类型将截断的结果转换为有符号/无符号。
如果较大的值太大而无法放入较小的类型,则会导致未定义的行为(请纠正我)。但是,我的规则应该适用于所有机器(也请纠正我)并且结果应该是可预测的。- 首先在MSB端截断 以匹配大小。
扩大整数(更小->更大)
一)
signed char
->signed int
- 在更小的前面加上 MSB(1 或 0)以匹配更大的大小
- 转换为签名
b)
signed char
->unsigned int
- 在更小的前面加上 MSB(1 或 0)以匹配更大的大小。
- 转换为无符号
c)
unsigned char
->signed int
- 前面加 0 以匹配更大的尺寸
- 转换为签名
d)
unsigned char
->unsigned int
- 前面加 0 以匹配更大的尺寸
- 转换为无符号
我没有提到的未定义/未指定的行为会在哪里弹出?