2013-05-02 18 views
4

從下面的代碼我期望x中的所有位設置爲1,但不知何故只有前32個位被設置:設置所有位中的int64_t

int64_t x = 0xFFFFFFFF; 
x<<32; 
x|=0xFFFFFFFF; 

注:4294967295每一行結果後打印X(32低位設置爲1)。 另外,嘗試使用numeric_limits<int64_t>::min()沒有成功。 我的問題是如何設置x中的所有位? 使用RHEL5.5。

THX

+2

你是怎麼打印它的? – Mysticial 2013-05-02 23:15:11

+1

如果一切都失敗了,我真的認爲是因爲它不好看,memset(&x,0xFF,8)'。 – ssube 2013-05-02 23:15:51

+0

建立流串並打印它,沒有精度。假設打印是好的,我在代碼 – 2013-05-02 23:16:55

回答

13

x<<32計算移位x由32位左的結果,並且不執行任何操作,其值爲。您想改爲使用x <<= 32

+0

jwodder有你想要OP。您忘記分配您的結果: x = x << 32; 而不是你所擁有的。 – Xathereal 2013-05-02 23:19:29

+1

愚蠢的錯字...非常感謝。 – 2013-05-02 23:20:26

+0

順便說一下,它在技術上未定義的行爲,因爲溢出 – Hurkyl 2016-06-30 11:30:25

10

爲什麼不是int64_t x = -1?或uint64_t x = ~0

+0

實際上發佈後,你是完全正確的。謝謝 – 2013-05-02 23:24:32

4

這將工作:

int64_t x = ~0LL; (iner 

int64_t x = -1LL; 

你可以逃脫不具有LL,但不能保證 - 依賴於編譯器。

+1

而且,你可能會得到LL :)(「取決於編譯器」,雖然128位long long不會有一段時間) – 2013-05-02 23:39:26