C++에서 부호없는 시프트를하고 싶습니다. 여기에 예제 코드가있다. 문제는 그것이 일반적이지 않다는 것입니다. 이 코드는 완전히 잘못되었습니다. longs에서는 작동하지 않으며 char과 같은 더 작은 유형에서는 작동하지 않습니다. 나는 (unsigned T)
을 시도했지만 구문 오류입니다. 전문화하지 않고 어떻게 일반화 할 수 있습니까?C++에서 부호없는 시프트 템플리트
#include <cassert>
template<class T>
T unsigned_shift(const T&t, int s) { return ((unsigned int)t)>>s; }
int main()
{
assert(unsigned_shift(-1, 2)==(-1u>>2));
assert(unsigned_shift((char)-1, 2)==64);
}
부스트를 사용할 수 있는지 확신 할 수 없지만 코드를 살펴본 결과 전문화를 사용해야합니다. 나중에 C++ 0x 사람이 다른 대답을 추가 할 수 있기를 기대하면서 나중에 받아 들일 것입니다. –
@ acidzombie24'std :: make_ [서명되지 않은]이 (가) C++ 0x와 함께 '' . 그들의 사양은 Boost 특성과 유사합니다. 마지막으로, 리턴 될 때 부호없는 (unsigned)에서 T 로의 최종 (묵시적인) 변환은 T가 서명 될 때 정의 된 구현임을 기억하십시오. –
@Luc : 고맙습니다. –