關於 long 與 long long

看板C_and_CPP作者 (☆牜攵☆犬羊)時間6年前發表 (2019/03/21 06:49), 6年前編輯推噓6(6015)
留言21則, 13人參與, 6年前最新討論串1/1
一直以來我一直以為 long、long long int 與 long long 是同義等價的,因為在 64 位元 系統下,sizeof(long) 及 sizeof(long long) 都是 8 啊! 可是我最近看到 stdlib.h 關於絕對值的函式有三個:abs, labs 及 llabs。如果 long == long long,為何要有兩個不同的函式?如果不同,那又是不同在哪裡? -- Sent from my Sony Xperia XZ1 PiTT // PHJCI -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.60.35.75 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1553150968.A.3AC.html

03/21 15:06, 6年前 , 1F
long 與long long 的大小規範都是至少幾byte,不是固定
03/21 15:06, 1F

03/21 15:06, 6年前 , 2F
幾byte
03/21 15:06, 2F

03/21 15:08, 6年前 , 3F
標準沒規定long == long long
03/21 15:08, 3F
所以跟作業系統也有關囉?

03/21 15:17, 6年前 , 4F
在32bit的年代long是4個byte喔 更早還有int是2byte的
03/21 15:17, 4F

03/21 15:20, 6年前 , 5F
所以要4byte有號整數的準確寫法是signed int32_t
03/21 15:20, 5F

03/21 16:24, 6年前 , 6F
請愛用uint64_t
03/21 16:24, 6F
※ 編輯: nevikw39 (101.137.38.17), 03/21/2019 17:44:10

03/21 19:38, 6年前 , 7F
03/21 19:38, 7F

03/21 19:38, 6年前 , 8F
上面都寫at least還粗體 XD
03/21 19:38, 8F
它上面的 int 也是至少 16 bits!我初學 C 時好像看過說 short 介於 -32767~32768,in t 也是,卻發現 int 的範圍其實大大的超過。所以還是要看不同的平台的定義啊 ※ 編輯: nevikw39 (106.107.176.158), 03/21/2019 19:50:45

03/21 20:14, 6年前 , 9F

03/21 20:26, 6年前 , 10F
你試試 visual c++
03/21 20:26, 10F

03/21 21:07, 6年前 , 11F
64 位元也有 LP64 跟 ILP 64 兩種, 一個 int 32 位一個
03/21 21:07, 11F

03/21 21:11, 6年前 , 12F
64 位.
03/21 21:11, 12F

03/21 21:16, 6年前 , 13F
這就是為什麼需要 sizeof() operator, 不然都照你的
03/21 21:16, 13F

03/21 21:16, 6年前 , 14F
想像 hard-code 就好啦
03/21 21:16, 14F

03/21 22:07, 6年前 , 15F
寫 arduino 就會遇到 int 2bytes 了
03/21 22:07, 15F

03/21 22:13, 6年前 , 16F
要是這語言打一開始就都用stdint.h裡的東西就好了
03/21 22:13, 16F

03/21 22:17, 6年前 , 17F
stdint.h 也是要看平台的, 不是每個平台都要支援全部
03/21 22:17, 17F

03/23 00:44, 6年前 , 18F
long 至少32bit,long long至少是64bit而int大小和平台有關
03/23 00:44, 18F

03/23 12:29, 6年前 , 19F
沒辦法 C 標準制定的那年代這樣訂最方便, 大家一起還債
03/23 12:29, 19F

03/23 12:31, 6年前 , 20F
現在出來的新語言通常就會直接訂死位元數了
03/23 12:31, 20F

03/25 18:41, 6年前 , 21F
請愛用cstdint
03/25 18:41, 21F
文章代碼(AID): #1SapFuEi (C_and_CPP)