2010-04-26 3 views
1

내 프로그램에서 160 비트 숫자를 나타 내기 위해 BitArrays를 사용하고 있습니다. 나는이 수를 더하거나 빼거나 증감 할 수 있기를 원하며 이것을하기위한 알고리즘은 무엇인가?비트 배열에 추가

지금은 곱셈과 나눗셈에 관심이 없지만 앞으로는 보너스 포인트가 될 수도 있습니다.

나는 C#으로 구현하고있어,하지만 당신은 언어

+0

BitArrays는 계산을위한 최상의 도구가 아닙니다. –

+0

10 진수가 아닌 2 진수로 중학교 때와 동일합니다 (또는 기본 2 ** 16, 2 ** 32 또는 당신에게 편리한 모든 것을 하드웨어의 장점으로 활용하려는 경우). –

+0

비트 배열이 이상하지 않다는 것을 알고 있지만 많은 양의 코드가 개별 비트 트위들 링을하고 있으며, 실제로는 거의 모든 산술 연산을 수행하지 않습니다. 따라서 비트 배열 – Martin

답변

1

:-) 어떤 고통과 re-use 누군가를 elses imlpementation을 절약 할 수있다, 당신은 최근에 .NET 4.0을 출시에 추가 된 BigInteger를 살펴 할 수 있습니다.

+0

Omg, 매우 유용합니다. O_O 고마워요! – Martin

0

증가에 익숙하지 않은 당신이 손으로 쓸 수 감소하면 의사는 괜찮습니다, 당신은 쓰기 방법을 함께 할 수 substracing 추가. 부호없는 8 비트 바이트

100100 
010110 + 
-------- 
111010 
0

배열은 많이 만들 수 있습니다 당신은뿐만 아니라 기본이이처럼 10

에 대한 기본 학교에서 모든 숫자 시스템 작업이 방법을 사용하기 때문에이 방법을 알고 더 쉽습니다. 그런 다음 가장 중요한 바이트에서 더하거나 뺄셈을 수행하고 운반해야합니다.

binary addition에는 많은 정보가 있습니다. 당신은 C#을 사용하고 있기 때문에

또는, 당신은 자신에게

+0

바이트 배열이 더 쉽게 어떻게됩니까? 그것은 더 빠르지 만 알고리즘은 기본적으로 비트, 바이트, 단어 등 어떤 것을 사용 하든지 동일합니다. –

+0

사실, 추가하는 데 주된 문제가 있습니다. 비트 또는 바이트로 동일합니다. – Martin

+0

C#의 BitArray 구현에 익숙하지는 않지만 산술 연산자가 포함되어 있지 않은 게시물에서 추측 했습니까? ..unsigned char의 _do_에는 네이티브 산술 연산자가 있습니다. –

1

더 좋은 방법이 있습니다. 고등학교 수학에는 한 번에 한 비트 씩 작업해야한다는 단점이있는 표준 '리플 캐리'방식이 사용됩니다. '미리 보는 수행'당신이 구글하거나 읽고 싶은 용어입니다 :

http://en.wikipedia.org/wiki/Carry_look-ahead_adder

이 그룹 비트와 크게 함께 번호를 추가하는 단계의 수를 줄이기 위해 일부 영리한 로직을 수행합니다. 뺄셈을위한 병렬 처리가 있습니다. 이름을 기억할 수 없습니다.

+0

캐리 룩 어 퍼스트는 어떤 단계도 저장하지 않지만 실제로는 더 많은 단계를 사용합니다. 덧셈의 ​​병렬성을 높이는 것만 유용합니다. 포스터가 말하고있는 숫자의 크기에 대해서는 소프트웨어에서별로 유용하지 않습니다 (하드웨어 덧셈기에서는 매우 인기가 있습니다). 포스터에 추가 할 숫자가 많거나 (또는 ​​곱셈을 할 경우) 캐리 저장 추가 기능이 유용 할 수 있지만 이러한 경우는 아닙니다. –