5

최근에 나는 this question으로 혼란스러워했다. 아마도 언어 사양을 읽지 않았기 때문일 수도 있습니다 (내 잘못입니다.).컴파일러와 음수 표현

C99 표준은 컴파일러에서 음수 표현을 사용해야한다고 말하지 않습니다. 나는 항상 음수를 저장하는 유일한 방법은 2의 보수 (대부분의 경우)라고 생각했습니다.

그래서 여기 내 질문 : 당신은 기본적으로 하나의 보수 또는 부호 크기 표현을 구현하는 현재의 컴파일러를 알고 있습니까? 일부 컴파일러 플래그로 기본 표현을 변경할 수 있습니까?

어떤 표현을 사용하는지 결정하는 가장 간단한 방법은 무엇입니까?

그리고 C++ 표준은 어떻습니까?

+0

아래의 질문에 대한 자세한 내용을보실 수 있습니다 끝난. 이것은 아마도 #define에서 수행되고 컴파일시 평가 될 수 있습니다. – slipperyseal

+0

지난 6 년 동안이 문제를 해결하지 않았다면 말입니다. : o – slipperyseal

+0

[현실 세계에서 보완 된 것이거나 역사적인 것일까?] (https://stackoverflow.com/q/161797/995714) –

답변

5

필자는 컴파일러가 어떤 표현을 사용하는지에 대한 문제가 아니라 기본 컴퓨터가 사용하는 표현이 무엇이라고 생각합니다. 컴파일러는 타겟 머신이 지원하지 않는 표현을 선택하는 것은 매우 어리 석다.

IP 프로토콜 집합의 일부 체크섬 필드에는 1의 보수가 사용되므로 전용 "네트워크 가속기"유형의 CPU가 사용됩니다.

+0

C 컴파일러가 있습니까? "네트워크 가속기"- 타입 CPU? – klew

+0

@klew : 인터넷 검색에 몇 분의 과격한 시간을 보냈지 만 그다지 증명할 수는 없습니다. :) – unwind

1

twos-complement 표현이 훨씬 일반적이지만, 유일한 표현은 아닙니다 (see some). C 및 C++ 표준화위원회는 비 2 진 보충 시스템이 넌 - 네이티브 표현을 에뮬레이트하도록 요구하기를 원하지 않았습니다. 따라서 C++은 특정 음의 정수 형식을 필요로하지 않습니다.

서명 된 유형에 대해 비트 연산의 정의되지 않은 동작이 발생합니다.

+0

네,하지만 제가 물어 보는 것이 아닙니다. 기본적으로 non-two의 complemet을 사용할 C 컴파일러를 알고 있습니까? – klew

+0

non-tows-complement ...를 사용하는 시스템을위한 것 ... 분명히, 아직 지원되는 Unisys 상자를 포함합니다 (두 번째 링크에 나열 될 수 있음). – Richard