나는이 같은 일부 코드가 음수 :__builtin_clz는()
int foo(unsigned long long x) {
unsigned int x1 = (unsigned int)(x >> 32);
unsigned int x2 = (unsigned int)(x);
if (x == 0) {
cout << x1 << " " << __builtin_clz(x1) << endl;
cout << x2 << " " << __biultin_clz(x2) << endl;
}
}
x = 0
의 출력은 다음과 같습니다
0 587581823
0 -32
그리고 가장 이상한 것은 항상 여기 587581823
동일하다 __builtin_clz(x1)
이다 다른 난수 (0보다 작음) 및 __builtin_clz(x2)
은 항상 -32
는'정의되지 않은 __builtin_clz' 아닌가요 정의되지? 그것은 귀하의 경우에 보장됩니다. – amaurea
@amaurea이 정의를 할 수있다, 난 정말 몰라. 나는 조금 검색 및 모든 장소에 나는이 정의되지 않은 경우 (32)가 다음 첫 번째 큰 난수 괜찮습니다 보았지만, 왜 두 번째 숫자는 항상 -32 다음입니까? – PepeHands
@Dima : "정의되지 않은"은 실제로 나쁜 카테고리입니다. "노란색"도 유효한 결과입니다. 세부 사항을 추론하려고하지 마십시오. – MSalters