다음은 작동 또는 구현이 보장되는지 여부입니다.C에서 서명되지 않은 서명 된 변환
unsigned int a = 4294967294;
signed int b = a;
b
값은 GCC에 -2
이다. C99 가입일
(§6.3.1.3/3) 그렇지 않으면, 새로운 타입의 서명되고, 값이 표현 수 없다; 결과가 구현에 의해 정의되거나 구현 정의 된 신호가 발생합니다. (당신이 제대로 때문에 6.3.1.3p3의 언급 한 바와 같이)
다음은 작동 또는 구현이 보장되는지 여부입니다.C에서 서명되지 않은 서명 된 변환
unsigned int a = 4294967294;
signed int b = a;
b
값은 GCC에 -2
이다. C99 가입일
(§6.3.1.3/3) 그렇지 않으면, 새로운 타입의 서명되고, 값이 표현 수 없다; 결과가 구현에 의해 정의되거나 구현 정의 된 신호가 발생합니다. (당신이 제대로 때문에 6.3.1.3p3의 언급 한 바와 같이)
signed int
-a
값의 변환은 구현 정의이다. 예를 들어 일부 시스템에서는 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
I는 예를 들어 양의 정수 값을 제공하는 작은 사용할 경우'부호의 INT A = 42; signed int b = a; 결과가 여전히 구현 정의입니까? – user963241
@ user963241 그 경우'a'의 값은'b'의 타입으로 표현 될 수 있으므로 변환 후의 값은 변하지 않습니다. 구현 정의 동작은 없습니다 (6.3.1.3p1 참조). – ouah