2017-04-10 4 views
2

저는 std :: bitset < 32>을 가지고 있고 올바른 16 비트를 분리하고 그 비트를 부호있는 숫자처럼 출력하려고합니다. 나는 또한 길 아래로 부호있는 숫자로 전체 32 비트를 출력하려고 할 것입니다. 그러나 Bitset은 서명 된 int to_string()을 지원하지 않습니다.부호있는 비트 집합을 부호로 변환하기

제가 하나 개의 출력이 원하는 : 오른쪽 16 비트의 전체 시퀀스

-1 대

-1608384513 예 1010000000100001 1111111111111111위한

.

그들을 변환하는 매끄러운 방법?

+0

당신은 가능성이 시도해 볼 수도 있습니다 (하지만 난 더 experenced C++ 비트 세트 사용자로부터 첫 번째 검증을하고 싶습니다) :'부호 오래 오래 발 = bitset.to_ullong(); int16_t final = (int16_t) (val & 000000000000FFFF); ' – synchronizer

답변

1

16 비트 숫자를 얻으려면 to_ulong()을 사용하고, 상위 16 비트를 버리고 int16_t으로 다시 해석하십시오.

마찬가지로 부호가있는 32 비트 숫자의 경우 to_ulong()을 호출하고 int32_t으로 다시 해석 할 수 있습니다.

std::bitset<32> b("10100000001000011111111111111111"); 
int16_t x16 = (int16_t)(b.to_ulong() & 0xFFFF); 
int32_t x32 = (int32_t)b.to_ulong(); 
cout << x16 << endl; 
cout << x32 << endl; 

Demo.

+0

비트 마스크가 필요한가요? 캐스트는 어쨌든 상위 비트를 잘라 내기 때문에 값이 무엇인지는 중요하지 않습니다. –