2009-11-12 3 views
5

나는 컴퓨터 아키텍처 내 HW에서 일하고 있어요 나는 다음과 같은 문제를 건너 왔어요 :내 컴퓨터 아키텍처 설명서에서 실수였습니까?

A = 247
B = 237

1) A와 B가 서명 가정하자 8 비트 정수 2의 보수 형식으로 저장된다. 포화 산술을 사용하여 A + B를 계산합니다. 결과는 10 진수로 작성해야합니다. 당신의 일을 보여주세요.
2) A와 B가 2 개의 compelemnt 형식으로 저장된 8 비트 정수로 부호가 있다고 가정합니다. 포화 산술을 사용하여 A - B를 계산합니다.

지금까지 유효한 질문은 무엇입니까? 포화 산술이 무엇인지는 알지만, 8 비트 2의 보수로 표현할 수없는 경우 A는 247이고 B는 237이라고 말하는 것이 타당한가요?

모든 비트를 극한 값으로 설정하기 위해 오버플로/언더 플로의 경우 포화 된 산술 연산이 있음을 알지만 일련의 질문을하는 것은 의미가 없습니다 (3 가지가 더 있습니다. 이 동일한 문제)는 지정된 형식으로 표현할 수없는 숫자의 산술을 포함합니다.

내가 틀렸어?

+18

@Perpetualcoder, 왜 주석을 추가해야할까요? 오늘은 교수님과 만날 수있는 시간을 넘어서서 저는 숙제를하고 있습니다 ~ 지금 ~. 그것이 하나의 문제라면 나는 그것을 건너 뛰었으나 많은 것이있는 것을보고, 나는 뭔가를 놓친다면 그렇게 물어보기로했다. – Teradice

답변

8

주어진 해석 값은 부호가없는으로 해석해야합니다. 127보다 큰 값은 분명히 8 비트 부호있는 2 보수 값의 범위를 벗어납니다. 그러나 나는 그 질문이 잘못 표현 된 것에 동의한다.

+0

그래,이게 나에게 맞는 유일한 접근이다. – Nosredna

1

나에게 잘못되었습니다. 8 비트 부호있는 2의 보수 정수는 -128에서 127 사이가 될 수 있습니다. 8 비트 부호있는 2의 보수 변수에 상수 237 또는 247을 지정하려고하면 언어에 따라 오류가 발생합니다.

+0

C에서 오류없이 작동합니다. 오버플로가 발생할 경우에만 오류가 발생합니다. 여기서는 그렇지 않습니다. "237"은 8 비트로 된 비트 표현으로 간단하게 변환됩니다. 차이점이없고 바이트를 0xED에 할당하는 것 – poundifdef

+0

@rasher : 표준은 그것에 동의하지 않습니다. 서명되지 않은 값을 부호없는 값으로 변환하는 것은 기본 유형에 맞지 않는 경우 결과에 지정된 구현입니다. 그러나 이것은 아키텍처 문제입니다. C가 할 일에 대한 질문이 아닙니다. –

3

잘 모르겠지만 일 수도 있습니다. : "십진수 237을 8 비트 정수로 변환하십시오. 이제이 비트들을 8 비트 2의 보수로 해석하여 추가하십시오." 컴파일하고 당신에게 당신이 8 비트 값 "237"

0

문제가 만약의 2의 보수 해석을 기반으로 기대 값을 제공

char a = 237; 
printf("%x %d\n",a, a); 

:

일종의 C의 말처럼 "A와 B가 8 비트 부호있는 정수로 저장된다고 가정하십시오."라고 말하면, 그것은 의미가 있습니다. 부호있는 8 비트 정수에 A = 247을 저장하면 -9의 값이 생성되고 B = 237을 저장하면 -19의 값이 생성됩니다. 그렇지 않으면 의미가 없습니다. 부호있는 8 비트 정수는 247 또는 237의 값을 가질 수 없습니다.

관련 문제