我已经签名多次,但每次涡轮c环绕。例如:
#include <stdio.h>
void main() {
int i = 100000;
printf("%d", i);
getch();
}
输出是-31072
,如果围栏完成,则是预期的输出。在二进制100000(dec)
中是11000011010100000
,最后16位存储是1000011010100000
。在两个补充表示中1000011010100000
是-31072
。
您的示例没有任何签名的溢出,因此没有不确定的行为。
(假设int_max小于100000。)
分配:
int i=100000;
执行来自类型长的隐式转换,即整数常数100000的类型到type int。转换的结果是实现定义 1 (或实现定义的陷阱是信号)。
1 (引用来自:ISO/IEC 9899:201X 6.3.1.3签名和未签名的整数3)
否则,将签署新类型,并且该值不能在其中表示;要么结果是实现定义的,或者提出了实现定义的信号。