是否保证以下工作或实施定义?
unsigned int a = 4294967294;
signed int b = a;
Run Code Online (Sandbox Code Playgroud)
值b
是-2
在gcc上.
来自C99(§6.3.1.3/ 3)否则,新类型已签名且值无法在其中表示; 结果是实现定义的,或者引发实现定义的信号.
将a
值转换signed int
为实现定义(正如您在6.3.1.3p3中正确提到的那样).例如,在某些系统上,它可以是INT_MAX
(饱和转换).
对于gcc
实现行为,此处定义:
当该值无法在该类型的对象中表示时,将整数转换为有符号整数类型的结果或信号(C90 6.2.1.2,C99 6.3.1.3).
为了转换为宽度N的类型,该值以2 ^ N的模数减少到该类型的范围内; 没有信号被提出.
http://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html