zub*_*rgu 12 c integer type-conversion implicit-conversion
我很难以我能够轻易理解的方式找到关于这个主题的信息,所以我要求对我发现的内容进行审查.这只是关于转换和转换的.
在示例中,我将指的是:
(signed/unsigned) int bigger;
(signed/unsigned) char smaller;
Run Code Online (Sandbox Code Playgroud)
截断整数.(超大化>小)
biggersmaller
如果较大的值太大而不适合较小的类型,则会导致未定义的行为(纠正我).但是我的规则应该是在所有机器上工作(对此也是正确的),结果应该是可预测的.
加宽整数(小 - >更大)
a)signed char- >signed int
b)signed char- >unsigned int
c)unsigned char- >signed int
d)unsigned char- >unsigned int
哪些未定义/未指定的行为,我没有提到可以弹出?
n. *_* m. 19
积分转换永远不会产生未定义的行为(它可以产生实现定义的行为).
转换为可以表示转换值的类型始终是明确定义的:值只是保持不变.
转换为无符号类型始终是明确定义的:以UINT_MAX + 1(或目标类型允许的任何最大值)为模取值.
转换为无法表示正在转换的值的带符号类型会导致实现定义的值或实现定义的信号.
注意,上述规则是根据整数值定义的,而不是根据比特序列定义的.