<limits>
과 같은 헤더를 포함하지 않고 부호없는 정수 타입의 최대 값을 얻으려고합니다. 그래서 저는 부호없는 정수 값 0의 비트를 뒤집기 만하면된다고 생각했습니다.비트 값이 0이 아닌 값으로 부호없는 최대 값 얻기
#include <iostream>
#include <limits>
int main()
{
std::cout << (~0U) << '\n'; // #1
std::cout << (std::numeric_limits<unsigned>::max()) << '\n'; // #2
return 0;
}
저는 이들 사이의 미묘한 차이에 대해서는 경험이 없습니다. 그래서 첫 번째 방법을 사용하여 예기치 않은 동작 또는 일부 플랫폼/아키텍처 문제가 발생할 수 있는지 묻는 것입니다.
'~ 0U'은 괜찮습니다. –
표준은 2의 보수 표현을 보장하지 않으므로,이 트릭은 이식성이 없으며 엄밀히 말하면됩니다. 실제로는 항상 작동 할 것입니다 만, 'unsigned int'인 '0U'로 지정하는 대신 '0'을 예상되는 형식으로 변환하는 것이 좋습니다. 예를 들어'unsigned long long b = ~ 0U;'int는'long long'보다 적은 비트를 사용할 때'unsigned long long' 값을 잘못 지정합니다. –
@ChristopherOicles 제안에 감사드립니다. 실제로'~ static_cast (0)'을 적당한 크기의 타입에 사용하고 있습니다. –