這是一些代碼。C中的64位數據類型(long long)的按位運算?
long long bitmap2 = 1;
printf("%d\n", bitmap2 & 1);
輸出爲0,但我期待1.我該如何解決這個問題? (我已經試過的1LL而不是1和uint64_t中,而不是久長;既給了0相同的答案)
這是一些代碼。C中的64位數據類型(long long)的按位運算?
long long bitmap2 = 1;
printf("%d\n", bitmap2 & 1);
輸出爲0,但我期待1.我該如何解決這個問題? (我已經試過的1LL而不是1和uint64_t中,而不是久長;既給了0相同的答案)
我認爲你應該使用printf("%d\ll", bitmap2 & 1)
而不是printf("%d\n", bitmap2 & 1)
,如果你想打印一個很長很長。
你目前看到的是未定義的行爲;你需要確保格式說明符和參數匹配。因此請使用以下選項之一:
printf("%lld\n", bitmap2 & 1);
printf("%d\n", (int)(bitmap2 & 1));
請參閱http://en.cppreference.com/w/c/io/fprintf獲取printf
的完整文檔。
但是,如果printf
格式字符串與您提供的參數類型不匹配,大多數編譯器都會警告您。例如,如果我與-Wall
標誌GCC編譯代碼時,我得到如下:
warning: format '%d' expects type 'int', but argument 2 has type 'long long int'
感謝 - 這個工作。 – user2184212 2013-03-19 22:58:11