0
雖然試圖想出一個位板類的方案,我決定使用全局編譯時間變量來表示關鍵位板配置,例如。所有黑車的初始位置。移位時是否有n位限制?
constexpr uint64_t BLACK_ROOK_INIT = 0x1 | (0x1 << 56);
但是我收到編譯器錯誤。編譯器似乎將此值視爲32位值並進行類型轉換,或者添加其他0似乎沒有什麼區別。類型定義來自。
只要我從這個表達式中刪除constexp就會編譯,但是仍然會產生相應的警告。這是爲什麼發生?我認爲這可能是預處理器的限制,但問題仍然存在,無需constexp。
chess.cpp:16:64: error: right operand of shift expression ‘(1 << 56)’ is >= than the precision of the left operand [-fpermissive]
僅供參考,這也不會編譯
constexpr int64_t BLACK_ROOK_INIT = (int64_t)0x1 | (int64_t)(0x1 << 32);
'1' *是一個'int'。你可以使用'uint64_t(1)'來獲得更大的值。 –
這仍然不能編譯。我會在上面添加來演示。 – mreff555
1是int。 *轉換後,轉換爲int64_t發生*。你想要1LL。 – deviantfan