문제

최근에 나는 혼란스러웠다. 이 질문.어쩌면 언어 사양을 읽지 않았기 때문일 수도 있습니다(내 잘못입니다. 알아요).

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

내 질문은 다음과 같습니다.기본적으로 1의 보수 또는 부호 크기 표현을 구현하는 현재 컴파일러를 알고 있습니까?일부 컴파일러 플래그를 사용하여 기본 표현을 변경할 수 있나요?

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

그러면 C++ 표준은 어떻습니까?

도움이 되었습니까?

해결책

컴파일러가 어떤 표현을 사용하는지에 대한 문제가 아니라 기본 기계가 어떤 표현을 사용하는지에 대한 문제가 아닙니다. 컴파일러는 대상 머신에서 지원하지 않는 표현을 선택하는 것이 매우 어리석은 일입니다. 왜냐하면 그 이점이 없기 위해 많은 오버 헤드를 도입하기 때문입니다.

IP 프로토콜 제품군의 일부 체크섬 필드는 자신의 보완을 사용하므로 전용 "네트워크 가속기"-유형 CPU : S 구현을 구현합니다.

다른 팁

하는 동안 2 개 보수 표현은 지금까지 가장 흔하며 유일한 것은 아닙니다.일부 참조). C 및 C ++ 표준화위원회는 TWOS 비 보상 기계가 비 네이티브 대표를 모방하기 위해 요구하지 않았다. 따라서 C ++가 아닌 C는 특정 음의 정수 형식이 필요하지 않습니다.

이로 인해 서명 된 유형에서 비트 타이어 작업의 정의되지 않은 동작이 발생합니다.

그만큼 유니시스 2200 시리즈 보수 수학을 구현하는 것은 여전히 ​​​​사용 중입니다.아래 질문에서 자세한 내용을 읽을 수 있습니다.

표준 위원회가 관심을 갖는 이국적인 아키텍처

C의 2의 보수가 아닌 구현이 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top