2012-05-22 4 views
0

부호없는 32 비트 2 진 정수 (오버 플로우 포함) 쌍을 추가합니다. 추가는 실제로 계산 된 것이 라기보다는 표현 적이므로 효율적인 알고리즘이 필요하지 않지만 각 구성 요소는 개별 비트로 수동으로 지정되므로 컴팩트 표현이 필요합니다. 어떤 제안?이진 연산으로 더하기

편집 : 부울 연산자의 관점에서. 그래서 첫 번째 비트는 carry = a & b; sum = a^b;, 다른 31 비트는 그렇게 생각합니까?

아, 빼기!

답변

0

입니다. 간단한 부울 연산으로 덧셈을 수행 할 수 없습니다 ators, 당신은 adder 필요합니다. (물론 덧셈기는 더 복잡한 부울 연산자를 사용하여 만들 수 있습니다.) 덧셈기는 2 비트와 carry를 더하고 다음 비트까지 전달합니다.

의사 코드 : 여기

carry = 0 
for i = 31 to 0 
    sum = a[i] + b[i] + carry 
    result[i] = sum & 1 
    carry = sum >> 1 
next i 

이는 vedit 텍스트 편집기의 매크로 언어를 사용하여 구현입니다. 추가 할 두 숫자는 각 줄에 하나씩 ASCII 문자열로 제공됩니다. 결과는 세 번째 줄에 삽입됩니다.

Reg_Empty(10)      // result as ASCII string 
#0 = 0        // carry bit 
for (#9=31; #9>=0; #9--) { 
    #1 = CC(#9)-'0'     // a bit from first number 
    #2 = CC(#9+34)-'0'    // a bit from second number 
    #3 = #0+#1+#2     // add with carry 
    #4 = #3 & 1      // resulting bit 
    #0 = #3 >> 1     // new carry 
    Num_Str(#4, 11, LEFT)   // convert bit to ASCII 
    Reg_Set(10, @11, INSERT)  // insert bit to start of string 
} 
Line(2) 
Reg_Ins(10) IN 
Return 

예 입출력 :

00010011011111110101000111100001 
00110110111010101100101101110111 
01001010011010100001110101011000 

편집 : 여기
가산기는 부울 연산으로 구현 한 의사 코드이다 : 이러한 데이터 구조를 언급위한

carry = 0 
for i = 31 to 0 
    sum[i] = a[i]^b[i]^carry 
    carry = (a[i] & b[i]) | (a[i] & carry) | (b[i] & carry) 
next i 
0

이 아마도 당신이 오버 플로우와 함께 두 개의 1 비트 숫자에 대한 추가 진술에 의해 시작할 수 있습니다 (= 휴대) :

A | B | SUM | CARRY 
=================== 
0 0 0  0 
0 1 1  0 
1 0 1  0 
1 1 0  1 

더이 문제를 일반화하기 위해, 당신은 또한으로 캐리 소요 "full adder"를 필요 입력. 그런 다음 32 비트 덧셈을 32 개의 완전 덧셈기 체인으로 표현할 수 있습니다 (첫 번째 스테이지의 carry 입력을 0에 묶음).

0
  • 이 숫자를 나타내는 데이터 구조 부분에 관한 정보. 비트 어레이는 컴팩트 개별 비트를 저장하는 배열이다 Bit Array
    4 가지

1)가있다.
비트 맵, 비트 세트 또는 비트 문자열이라고도합니다.

2) Bit Field
비트 필드 콤팩트 단일 비트의 각각은 개별적으로 어드레싱 될 수있는 비트의 짧은 일련의 복수의 논리 값을 저장하는 컴퓨터 프로그램에 사용되는 흔한 관용구이다.

3) Bit Plane
이러한 화상이나 음성 등의 디지털 신호의 이산 비트 평면()는 신호를 나타내는 이진수 각각 소정의 비트 위치에 대응하는 비트의 집합이다.

4) Bit Board
bitboard 또는 비트 필드는 일반적으로 게임 보드의 위치를 ​​나타내는, 동일한 정수에 관련된 부울 변수들의 전체 그룹 거즈 포맷이다. 각 단계에서 그것을 확인할 수 구현 대하여

  • , 우리는 다음과 같은 한
    S = a xor b xor c

S는 현재 비트의 합 B
C의 결과는 입력

운반된다 Cout - 출력 캐리는 (a & b) xor (c & (a xor b))

+0

덕분 . 그것은 내가 그들에 관해 물었던 나의 질문의 일부에 전적으로 대답했다. – Puppy