#include <stdio.h>
#include <stdint.h>
int main(){
uint64_t a = 1 << 63;
/* do some thing */
return 0;
}
$ gcc -Wall -Wextra -std=c99 test.c -o test
warning: left shift count >= width of type [-Wshift-count-overflow]
問:uint64_t
應具有64個比特的寬度,所以左移位運算溢出?如何在C使用uint64_t中
1是'int'文字。使用'1ULL << 63'代替 –
@LưuVĩnhPhúcÇ指定'1'類型的_integer constant_'int'。 C中唯一指定的_literals_是_string literals_和_compound literals_。 '1'既不是那兩個文字。 – chux
「爲什麼左移操作溢出?」 - >哪一個首先發生:'1 << 63'或者它賦值給'uint64_t a'?由於'1 << 63'發生第一,它被分配給的類型是無關的'1 << 63'評估。 – chux