看板 C_and_CPP 關於我們 聯絡資訊
一直以來我一直以為 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
firejox: long 與long long 的大小規範都是至少幾byte,不是固定03/21 15:06
firejox: 幾byte03/21 15:06
firejox: 標準沒規定long == long long03/21 15:08
所以跟作業系統也有關囉?
sarafciel: 在32bit的年代long是4個byte喔 更早還有int是2byte的03/21 15:17
sarafciel: 所以要4byte有號整數的準確寫法是signed int32_t03/21 15:20
chuegou: 請愛用uint64_t 03/21 16:24
※ 編輯: nevikw39 (101.137.38.17), 03/21/2019 17:44:10
james732: https://en.wikipedia.org/wiki/C_data_types 可以看看03/21 19:38
james732: 上面都寫at least還粗體 XD 03/21 19:38
它上面的 int 也是至少 16 bits!我初學 C 時好像看過說 short 介於 -32767~32768,in t 也是,卻發現 int 的範圍其實大大的超過。所以還是要看不同的平台的定義啊 ※ 編輯: nevikw39 (106.107.176.158), 03/21/2019 19:50:45
tinlans: 你試試 visual c++ 03/21 20:26
suhorng: 64 位元也有 LP64 跟 ILP 64 兩種, 一個 int 32 位一個 03/21 21:07
suhorng: 64 位. 03/21 21:11
loveme00835: 這就是為什麼需要 sizeof() operator, 不然都照你的 03/21 21:16
loveme00835: 想像 hard-code 就好啦 03/21 21:16
lc85301: 寫 arduino 就會遇到 int 2bytes 了 03/21 22:07
eye5002003: 要是這語言打一開始就都用stdint.h裡的東西就好了 03/21 22:13
loveme00835: stdint.h 也是要看平台的, 不是每個平台都要支援全部 03/21 22:17
aelin: long 至少32bit,long long至少是64bit而int大小和平台有關 03/23 00:44
uranusjr: 沒辦法 C 標準制定的那年代這樣訂最方便, 大家一起還債 03/23 12:29
uranusjr: 現在出來的新語言通常就會直接訂死位元數了 03/23 12:31
F04E: 請愛用cstdint 03/25 18:41