문제

다른 질문 C에서 홀수/균일 함을 결정하는 것에 대해 물었고, 관용 (X & 1) 접근법은 깨진 것으로 올바르게 플래그가 붙어 있습니다. 보완 기반 C 표준이 허용하는 시스템.

시스템은 컴퓨터 박물관 외부의 '실제 세계'에 실제로 존재합니까? 나는 1970 년대부터 코딩을 해왔고 나는 그런 짐승을 만난 적이 없다고 확신합니다.

실제로 그러한 시스템에 대한 코드를 개발하거나 테스트하는 사람이 있습니까? 그리고 그렇지 않다면, 우리는 그런 것들에 대해 걱정해야합니다. 실 101 종이 테이프와 펀치 카드와 함께 ...?

도움이 되었습니까?

해결책

이 모든 것이 당신의 뿌리를 아는 것입니다.
그렇습니다. 이것은 기술적으로 오래된 기술이며 아마도 다른 사람들이 그 질문에서 제안한 일을하고 모듈로 (%) 운영자를 사용하여 홀수 또는 짝수를 결정할 것입니다. 그러나 1s 보완 (또는 2s 보완)이 무엇인지 이해하는 것은 항상 알아야 할 것이 좋습니다. 당신이 그것들을 사용하든 아니든, 당신의 CPU는 항상 그러한 것들을 다루고 있습니다. 따라서 개념을 이해하는 것은 결코 아프지 않을 수 있습니다. 이제 현대 시스템은 일반적으로 그런 것에 대해 걱정할 필요가 없으므로 101 코스를 프로그래밍하는 주제가되었습니다. 그러나 어떤 사람들은 실제로 "실제 세계"에서 여전히 이것을 사용할 것이라는 것을 기억해야합니다. 예를 들어, 대중의 믿음과는 반대로 사람들이 여전히 어셈블리를 사용하십시오! 많지는 않지만 CPU가 원시 C#과 Java를 이해할 수있을 때까지 누구 여전히이 것들을 이해해야 할 것입니다.

그리고 도대체, 당신은 당신이 당신이 실제로 이진 수학을 수행 해야하는 곳에서 무언가를하고있는 일을할지 모르고 1s 보완이 유용 할 수 있다는 것을 알지 못합니다.

다른 팁

저는 원격 측정 필드에서 일하고 있으며 일부 고객에게는 여전히 1의 보완을 사용하는 오래된 아날로그-디지털 변환기가 있습니다. 보상하기 위해 1의 보완에서 2의 보완으로 변환하기 위해 다른 날에 코드를 작성해야했습니다.

그렇습니다. 여전히 거기에 있습니다 (그러나 당신은 그것을 자주하지 않을 것입니다).

RFC 791 P.14 IP 헤더 체크섬을 다음과 같이 정의합니다.

체크섬 필드는 헤더에있는 16 비트 단어의 모두 보완 합계를 16 비트의 보완입니다. 체크섬을 계산하기 위해 체크섬 필드의 값은 0입니다.

그래서 자신의 보완은 여전히입니다 무겁게 실제 세계에서 사용되는 모든 단일 IP 패킷에서 사용됩니다. :)

'80 년에 사용한 CDC 사이버 18은 1S 보완 기계 였지만 거의 30 년 전이었고 그 이후로는 보지 못했습니다 (그러나 PC가 아닌 마지막으로 일한 것은 이후).

나는 보완 시스템을 본 적이 없으며, 당신이 가지고있는 한 코딩을 해왔습니다.

그러나 나는 9의 보완 시스템 인 HP-41C 계산기의 기계 언어를 발견했다. 나는 이것이 쓸모없는 것으로 간주 될 수 있다는 것을 인정할 것이며, 나는 그들이 그것들을위한 C 컴파일러를 가지고 있다고 생각하지 않습니다.

우리는 지난 1960 년대에 내렸다 허니 복센 작년 언젠가는 그것을 현장에서 가장 오래된 기계로 만들었습니다. 두 사람의 보완이었다. 이것은 자신의 보완을 아는 것이 나쁜 일이라고 말하는 것은 아닙니다. 그냥, 당신은 그들이 당신이 직장에서 얼마나 많은 컴퓨터 고고학을하든 오늘날 자신의 보완 문제에 빠지지 않을 것입니다.

정수 쪽에서 더 많은 문제는 엔디 어 문제 (나는 당신을보고 있습니다 PDP). 또한, 당신은 더 많은 "실제 세계"(예 : 오늘) 문제에 빠질 것입니다. 떠 있는 가리키다 형식 정수 형식보다.

재미있는 일, 사람들은 같은 질문을했습니다 comp.std.c 1993 년, 그리고 당시에 사용 된 보완 기계를 아무도 가리킬 수 없었습니다..

그렇습니다. 우리는 자신의 보완이 우리 역사의 어두운 구석에 속하고 실제로 죽었으며 더 이상 걱정하지 않는다고 자신있게 말할 수 있다고 생각합니다.

나는 하나를 찾기로 결정했다. Unisys ClearPath 시스템에는 다음과 같습니다 ANSI C 컴파일러 (예, PDF 문서조차도 2013 년에 마지막으로 업데이트 된 "American National Standard C"라고 부릅니다. 문서를 사용할 수 있습니다. 온라인;

서명 된 유형은 모두 다음 속성과 함께 자신의 보완 표현을 사용하고 있습니다.

Type                 | Bits | Range
---------------------+------+-----------------
signed char          |   9  |  -2⁸+1 ...  2⁸-1
signed short         |  18  | -2¹⁷+1 ... 2¹⁷-1
signed int           |  36  | -2³⁵+1 ... 2³⁵-1
signed long int      |  36  | -2³⁵+1 ... 2³⁵-1
signed long long int |  72  | -2⁷¹+1 ... 2⁷¹-1

놀랍게도, 기본적으로 기본적으로 부적절한 정보를 지원합니다 unsigned int 그리고 unsigned long, 그것은 범위입니다 0 ... 2³⁶ - 2, 그러나 변경할 수 있습니다 0 ... 2³⁶ - 1 Pragma와 함께.

자신이 실제 문제입니까, 아니면 역사적 문제입니까?

예, 여전히 사용됩니다. 현대 인텔 프로세서에서도 사용됩니다. 에서 Intel® 64 및 IA-32 아키텍처 소프트웨어 개발자 매뉴얼 2A, 3-8 페이지 :

3.1.1.8 설명 섹션

그런 다음 각 명령어는 정보 섹션 수에 의해 설명됩니다. "설명"섹션은 지침과 필요한 피연산자의 목적을보다 자세히 설명합니다.

설명 섹션에서 사용할 수있는 용어 요약 :
* 레거시 SSE : SSE, SSE2, SSE3, SSSE3, SSE4, AESNI, PCLMULQDQ 및 XMM 레지스터를 참조하고 VEX 접두사없이 인코딩 된 모든 미래의 명령 세트를 나타냅니다.
* vex.vvvv. VEX 비트 필드는 소스 또는 대상 레지스터를 지정합니다 (1의 보완 양식).
* RM_Field : MODR/M R/M 필드 및 모든 rex.b의 속기
* reg_field : Modr/M Reg 필드 및 모든 rex.r의 속기

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