2012-11-03 1 views
0

C++에서 비트 연산을 사용하여 문제를 해결하려고하지만 실제로 멈추었습니다. 다음 쿼리를 도와주세요.비트 연산 (C++)을 지원하는 정확한 X 비트 크기 변수

1) 메모리에서 정확하게 100000 비트를 가져 와서 A & B와 같은 연산이 유효한 변수 A와 B를 만들 수 있습니까?

2) 처음 n 비트가 0이고 마지막 m 비트가 0이고 나머지가 1이되도록 B (100000 비트)를 생성하는 빠른 방법이 있습니까? (예 : B가 10 비트이고 0000011000과 같은 숫자 인 경우)

+0

실제로 100000 비트 (12,500 바이트)를 의미합니까? 두 가지 질문에 대한 답은 필요한 작업을 수행하기 위해 클래스를 작성하고 해당 클래스에 연산자를 오버로드해야한다는 것입니다. 또는 기존 클래스를 사용하여 동일한 작업을 수행 할 수 있습니다. – john

+0

@john 연산자에 과부하를주는 방법 &? –

+0

당신의 클래스가 Bit100000이라고 불리면, 간단히'Bit100000 operator & (const Bit100000 & x, const Bit100000 & y) {...}'함수를 작성하십시오. – john

답변

3

1에 대한 답변에서 이것은 확실하게 클래스가 의미하는 것입니다. 단순히 100,000 비트 (약 12.5K)를 포함하는 클래스를 만들고 operator& 메서드 (주소 연산자가 아닌 이진 값)를 재정의하십시오.

좋은 시작이 될 것이다 (예를 들어 우리가 비트 마스크를 들고 두 정수가) : 이것은 안된지만 당신에게 기본 아이디어를 줄 것이다

BigBits BigBits::operator &(const BigBits &that) const { 
    BigBits bb(*this); 
    bb.array[0] = this->array[0] & that.array[0]; 
    bb.array[1] = this->array[1] & that.array[1]; 
    return bb; 
} 

. 테스트하기 위해, 나는, 그 또한 사용자들은 정말 답에서

:-) 2 당신의 작업해야 할 때 등 생성자, 소멸자, 과제 등을 포함하여 상당히을 코딩해야 할 것 쉬운. 유일한 트릭 비트는 두 개의 에지 바이트이며 모든 내부 바이트는 모두 1 비트로 설정 될 수 있습니다.

가장자리 바이트를 설정하려면 비트 나누기를 사용하고 바이트의 비트 수와 모듈로를 사용한 다음 비트 마스크를 사용하여 설정합니다. 비트 마스크는 0x80, 0xc0, 0xe0, 0xf0, 0xf8 등이 될 것이며, 각각의 후속 값은 또 다른 1 비트를 더할 것입니다.

그런 다음 다양한 형태로 bitmask[bitpos % 8]을 사용하여 배열 바이트가 bitpos/8 일 때 에지 바이트를 설정할 수 있습니다.

+0

약간의 예를 들어 주시겠습니까? –

+0

@YashSingla, 나는 당신에게 갈 수있는 샘플 코드를 주었지만, 완전한 작동 솔루션을 제공 할 필요가 없다고 생각합니다. 음, 당연히 그것을 지불하지 않고 :-) – paxdiablo

+0

테스트되지 않았을뿐 아니라 잘못되었습니다. 당신은 어떤 이유로 메모리를 할당하고,'return * bb; '라고 써야한다. 메모리 누출이긴하지만 말이다. – john