2013-03-04 2 views
1

워드 크기가 16 비트 인 8 비트 아키텍처입니다. 이제 48 비트 정수 변수를 사용해야합니다. 나의 이해는 libm이 8, 16, 32, 64 비트 연산 (덧셈, 곱셈, 부호와 부호 없음)을 구현한다는 것이다.크기가 2의 거듭 제곱이 아닌 정수는 의미가 있습니까?

그래서 계산을하려면 64 비트 부호있는 또는 부호없는 정수로 값을 저장해야합니다. 옳은?

그렇다면 일반 루틴이 사용되지 않도록하려면 어떻게해야합니까? 예를 들어, 추가의 경우 : LSB 두 변수의와

  1. 시작
  2. 이상의 바이트를 사용할 수있는 경우
  3. 권리
  4. 에 두 변수를, 1 바이트를 otherways 고토 준비
  5. 변화를 계속 그들을 추가 자신의 논리를 구현하는 문제가 가치가 없다) 거의 모든 경우에 (비트의 부부는 절약, 올바른
  6. 고토 1)
+1

1 꽤 좋은 정수입니다 ... 아마도 가장 좋은 것입니다! –

답변

3

libm은 표준 크기 유형에 대한 루틴을 구현하고 컴파일러는 표현식에 사용할 올바른 것을 선택합니다.

고유 한 유형을 구현하려는 경우 다음을 수행 할 수 있습니다. 일반적인 연산자를 사용하려면 컴파일러에서 컴파일러를 선택해야합니다.

당신은 기능과 동작을 구현할 수는 add(int48_t, int48_t) 말,하지만 컴파일러 등, 그래서

상수 계산과 같은 최적화를 할 수 없습니다, 아무것도 자신 만의 컴파일러를 구현에서 당신을 중지하지가 , 그러나 그것은 정말로 필요합니까? 그 공간을 정말로 저장해야합니까? 그렇다면, 그것을 위해 가십시오!

+0

이 말은 내가하고 싶은 말은 .. ..-) –

2

.

+1

학생이 학교에서 가르치는 것처럼 일반 수학 루틴을 쓰지 않게하려면 무엇이 필요합니까? 즉, 두 변수의 LSB부터 시작하십시오. 그들을 추가하십시오; } 더 많은 바이트를 사용할 수 있다면 캐리를 기억하고 동일하게 수행하십시오.} – Vorac

+0

CPU의 전체 단어에 대한 연산은 1 클럭 주기로 수행되며 비트 단위로 이동하려면 50 배를 쉽게 소비 할 수 있습니다 계산을 수행하는 시간 :-) –

+0

기본적으로 CPU [명령어 세트] (http://en.wikipedia.org/wiki/Instruction_set)는 단어 –

관련 문제