[問題] 關於long和unsigned long

看板C_and_CPP (C/C++)作者 (=======中間選民=======)時間12年前 (2013/12/26 20:39), 編輯推噓0(005)
留言5則, 1人參與, 最新討論串1/2 (看更多)
各位先進好 最近看K & R的The C programming language(ed 2) 在p.44的地方有講到關於unsigned operands的conversion rule 書上舉了一個例子 假設int是16 bits long是32bits 那麼-1L < 1U 且 -1L > 1UL 書上說 -1L is promoted to unsigned long and thus appears to be a large positive number 實在是不太懂為何? 有人可以解釋一下為什麼 -1L會變成很大的正整數嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.250.187.215

01/11 23:41, , 1F
"-1L",也就是0xFFFFFFFFFFFFFFFF,會變成以下這個數,
01/11 23:41, 1F

01/11 23:43, , 2F
18446744073709551615=2^64-1,所以就很大啦
01/11 23:43, 2F

01/11 23:44, , 3F
(如果是64 bit系統,sizeof(long)==8的話)
01/11 23:44, 3F

01/11 23:52, , 4F
啊對不起沒有看到假設內容…不過,C++標準文檔相應章節應
01/11 23:52, 4F

01/11 23:52, , 5F
當還适用(N3485 4.5 Integral Promotions)
01/11 23:52, 5F
文章代碼(AID): #1Il2ED6e (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Il2ED6e (C_and_CPP)