IT이야기

경고:수 을 왼쪽 시프트 형식의 탭 너비입니다.

cyworld 2022. 5. 17. 21:58
반응형

경고:수 을 왼쪽 시프트 형식의 탭 너비입니다.

나는 조각들을 다룰 때 그리고 종합 다음 경고에 갇혀 있어:처음입니다.

 7: warning: left shift count >= width of type

내 7호선은 이렇다.

unsigned long int x = 1 << 32;

This would make sense if the size of long내 시스템에 평균 32비트입니다.하지만,sizeof(long)돌아온다8그리고CHAR_BIT으로 정의된다8오래 되어야 한다 8x8=64비트 길이 제안.

내가 여기에 무엇을 놓치는 것일까요?이다sizeof그리고CHAR_BIT또는 나는 기본적인 것을 이해하지 가지고 있지?

long이 될 수도 있다 64비트 타입이 아닙니다, 그러나.1여전히는int. 당신은 준비할 필요가 있다1 a long int를 사용하여L접미사:

unsigned long x = 1UL << 32;

(여러분은 그것을 해야 한다.unsigned를 사용하여U접미사로 나는 걸 증명했다 왼쪽의 문제가 서명된 정수 전환하지 않도록.때 a에는 아무런 문제가 없다고long64비트이고 32비트에 의해,지만 경우에는 문제가 63비트를 옮겼다) 옮기는 순간 넓은 있다.

unsigned long32비트 또는 당신의 시스템에 따라 64비트이다. unsigned long long있나 항상 64비트다.다음과 같이 당신은: 해야 합니다.

unsigned long long x = 1ULL << 32

그 일반적인 해결책[상수]을 위한 행복이다.ULL<,<>32이 없는 기존 변수-예를 들어[가변]&lt에 좋고,<>32.변수에 대한 완벽한 해결책은:((부호 없는 오래)[가변]<,<>32cm이다.외:이 경고의 저의 개인적인 의견이 완전히 처음에 불필요한 것이다.컴파일러는 받는 데이터형이 무엇인지 및 헤더 또는 상수 값의 정의에서 매개 변수의 폭을 아는지 볼 수 있다.저는 애플사가 clang 컴파일러가 약간 더 이 경고에 관하여 똑똑하게 만들 수 있다고 믿는다.

Unsigned 긴 x)1UL 개체,<>31;.

오류 메시지 아니구요.왜냐하면 전에 32지정하기 때문에 0-31으로 제한했다, 사실이 아니다.

값을 최대 비트로 전환할 수 없음

int x;         // let int be 4 bytes so max bits : 32 
x <<= 32; 

그래서, 이것은 경고를 생성한다.

left shift count >= width of type (i.e type = int = 32 )

그런 걸 쓰면 되잖아

unsigned long x = 1;
x = x << 32;

참조URL: https://stackoverflow.com/questions/4201301/warning-left-shift-count-width-of-type

반응형