2014-01-16 3 views
0

0의 칭찬을 발견하면 -1이됩니다. 0의 보수가 -1 인 이유는 무엇입니까? 항상 -1입니까, 아니면 컴파일러에 의존합니까?ANSI C89의 제로 보완

+2

"보완"또는 "칭찬"은 무엇을 의미합니까? 당신은 비트 부정을 의미합니까? –

+0

~ ~ 연산자의 작동을 의미합니다. – user3202188

+0

그렇습니다. 비트 단위 부정. –

답변

2

~0으로 C로 쓰여진 0의 비트 단위 부정은 컴파일러에서 two's complement을 사용하여 부호있는 정수를 나타내는 경우에만 -1입니다. 따라서 컴파일러가 숫자를 나타내는 방식의 결과이며 일반적으로 "true"가 아닙니다.

0

Two's complement에 -1입니다. 컴파일러는 다른 표현을 자유롭게 선택할 수 있습니다.

+1

... 실제로 사용중인 컴파일러가 없습니다. :) –

+0

@ 존 하나의 보완법을 사용하는 레거시 시스템이 있지만 점점 더 희귀 해지고 있습니다. 저는 보통 C를 코딩 할 때 2의 보수를 가정합니다. C89보다 새로운 구문을 사용하면 아마도 2의 보수를 가정하는 것보다 이식성이 크게 감소 할 것입니다. –