2016-10-19 7 views
4

입력 비트 수를 취하고 출력 비트가 인 이진수를 표시하는 간단한 프로그램을 만들고 싶습니다 (예 : 3을 입력하십시오 : 000, 001, 010, 011, 100, 101, 110, 111). 내가 비트 세트에 < 비트>을 변수에 할당 할 때 내가 얻을 유일한 문제는, -loop에 대한 두 번째 에 있지만 그것은 상수를 원한다. 해결책을 찾을 수 있도록 도와 주시면 정말 대단합니다. 템플릿 매개 변수 컴파일 시간이 일정해야합니다 (호출 C++과 같이 "비 형")C++ 입력 값을 std :: bitset 인수에 어떻게 할당 할 수 있습니까?

#include <iostream> 
#include <bitset> 
#include <cmath> 

using namespace std; 

int main() { 
    int maximum_value = 0,x_temp=10; 
    //cin >> x_temp; 
    int const bits = x_temp; 

    for (int i = 1; i <= bits; i++) { 
     maximum_value += pow(2, bits - i); 
    } 
    for (int i = maximum_value; i >= 0; i--) 
     cout << bitset<bits>(maximum_value - i) << endl; 
    return 0; 
} 
+0

가능한 복제 (http://stackoverflow.com/questions/6038718/convert-integer-to-bits) –

+0

대답하기 : 전역 상수 그 질문은 컴파일 시간에 알려진 숫자에 달려 있습니다. OP가 필요로하는 것에는 적합하지 않습니다. –

+0

'std :: bitset'을 사용해야하는 경우가 아니라면 http://stackoverflow.com/questions/23173261/int-to-binary-conversion-explanation에서 해결책을 사용할 수 있습니다. –

답변

1

숫자, 그래서 당신은 사용자가 제공 한 번호를 사용할 수 없습니다 여기에 코드입니다. 대신 큰 정수 (예 : 64)를 사용하십시오. 당신은 당신의 출력을 제한 할 또 다른 정수 필요 bitset 64 개 비트를 가진 unsigned long long 인자를 가진 생성자를 가지고 있기 때문에,

int x_temp = 10; 
cin >> x_temp; 
int const bits = 64; 
... 

여기에 64 당신이 사용할 수있는 최대 값의 일종이다 (적어도; 될 수있다 더).

그러나 중간 계산에 int을 사용하면 코드에서 오버플로없이 최대 14 비트를 안정적으로 지원합니다. 14 비트 (예 : 64)를 초과하여 지원하려면 uint32_t 또는 uint64_t과 같은 더 큰 유형을 사용하십시오.


필요한 것보다 많은 비트를 보유하는 문제는 추가 비트가 표시된다는 것입니다. 그들을 잘라하려면 substr를 사용

여기
cout << bitset<64>(...).to_string().substr(64 - x_temp); 

to_string 64 개 문자 문자열로 변환하고, substr 누구 수 x_temp 인 마지막 문자를 잘라냅니다.

+0

고마워, 내가 이해할 것 같아요,하지만 당신은 내가 0을 선도에 관해서는 어떻게 내 출력을 제한 할 수 말해 줄 수 있습니까? – januszysko

+0

그래서 선행 0을 표시하고 싶지 않으십니까? 당신은 다른 질문을하고 싶을지도 모릅니다. – anatolyg

+0

나는 의미한다. 그러나 제한된 가치만을 위해서. 나는 64 비트에서 숫자를 보여주고 싶지는 않지만 예를 들면, 10을 쓰고 싶다. – januszysko

0

const int bits = 10;을 정의해야합니다. [비트 정수로 변환]의

#include <iostream> 
#include <math.h> 
#include <bitset> 

using namespace std; 
const unsigned bits=10; 
int main() { 
    int maximum_value = 0,x_temp=10; 

    for (int i = 1; i <= bits; i++) { 
     maximum_value += pow(2, bits - i); 
    } 
    for (int i = maximum_value; i >= 0; i--) 
     cout << bitset<bits>(maximum_value - i) << endl; 
    return 0; 
} 

enter image description here

+0

그건 내가 가진 문제가 아닙니다. 키보드의 비트 수를 입력 할 수있는 가능성을 갖고 싶습니다. – januszysko

+0

템플릿 인수는 컴파일 전에 정의되어야합니다. – Abel