這裏是我的代碼:是無符號long int對此操作是否正確?
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned long int x = 0;
// trying to make x = 2,147,483,648
x = 1 << 31;
printf("%lu", x);
}
它返回得到x = 18446744071562067968.我讀了unsigned long int類型應該上升到4,294,967,296,那麼爲什麼我不能用1 < < 32到集合X等於2,147,483,648?
無論寫在哪裏:這是錯的! http://port70.net/~nsz/c/c11/n1570.html#5.2.4.2.1並獲得正確的數學。提示:最大。價值不可能是平等的。 – Olaf
胡?它表示無符號長整型對象的最大值int ULONG_MAX 4294967295 // 2^32 - 1 – Austin
在受歡迎的請求中,我嘗試幫助您一點。 C標準的公佈鏈接中第1段的最後一句陳述「其實現定義的值應與所示的相同符號在數量(絕對值)上等於或大於**」。希望重點有所幫助。另外請注意,您在代碼中用「31」代替,而在文本中用「32」代替。非常重視「一次計數」;這隻會使值增加一倍,導致windows'unsigned long'的未定義行爲。對於POSIX來說,它是正確的,順便說一句。因爲它有64位。 – Olaf