나는 다음과 같은 코드 조각이 :경고 : 기본적으로 사용] 유형의> = 폭 왼쪽 시프트 수
long int compute_data_length(unsigned char* buf, int data_offset) {
long int len;
if(!buf)
return -1;
switch(data_offset) {
case 2: {
len = (buf[2] << 8) | buf[3];
}
break;
case 8: {
len = (buf[2] << 56) |
(buf[3] << 48) |
(buf[4] << 40) |
(buf[5] << 32) |
(buf[6] << 24) |
(buf[7] << 16) |
(buf[8] << 8) |
(buf[9] );
}
break;
default: len = -1; break;
}
return len;
}
내가 컴파일 할 때, 나는 다음과 같은 경고 얻을 :
math_fun을 .c : 240 : 21 : 경고 : 왼쪽 시프트 수> = 유형의 너비 [기본적으로 사용 가능] len = (buf [2] < < 56) | ^ math_fun.c : 241 : 27 : 경고 : 왼쪽 시프트 수> = 유형의 너비 [기본적으로 사용 가능] (buf [3] < < 48) | ^ math_fun.c : 242 : 27 : 경고 : 왼쪽 시프트 수> = 유형의 너비 [기본적으로 사용 가능] (buf [4] < < 40) | ^ math_fun.c : 243 : 27 : 경고 : 왼쪽 시프트 수> = 유형의 너비 [기본적으로 사용 가능] (buf [5] < < 32) |
경고를 어떻게 수정합니까?
'long int'의 크기는 얼마나됩니까? 이동을하기 전에 올바른 유형으로 캐스트하십시오. – Deduplicator
-bash-4.1 $ ./a.out long int 8 long long의 크기 8 unsigned long 8 –
[부호없는 정수 필드 시프트는 부호있는 정수를 산출합니다] (http://stackoverflow.com/questions/22152636/)와 밀접하게 관련됩니다. 부호가없는 정수 비트 필드 시프트 수율 부호있는 정수/22152886 # 22152886), 울타리인지 여부는 dup인지 여부를 결정합니다. –