[英]bits shift exceeding width of type in C
我有一個名為 vpn 的 uint64_t 變量,我試圖獲得它的左 9 位。 我知道 vpn 是 45 位長,所以我嘗試了以下操作:
uint64_t nineMSB = (vpn & (511 << 36)) >> 36;
但我收到以下警告:
left shift count >= width of type
這是為什么? 511 是二進制的 9 個 1,所以 511 << 36 應該給我 45 位,我正在用 uint64_t 進行 AND 運算,所以結果不應超過 64 位。
謝謝!
沒有任何后綴的整數常量具有int
類型。 在許多系統上int
是 32 位長,但它也可以只有 16 位長(avr 端口)。
uint64_t foo(uint64_t vpn)
{
uint64_t nineMSB = (vpn & (511ULL << 36)) >> 36;
return nineMSB;
}
uint64_t foo1(uint64_t vpn)
{
uint64_t nineMSB = (vpn & ((uint64_t)511 << 36)) >> 36;
return nineMSB;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.