作者nevikw39 (☆牜攵☆犬羊)
看板C_and_CPP
标题关於 long 与 long long
时间Thu Mar 21 14:49:25 2019
一直以来我一直以为 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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1553150968.A.3AC.html
1F:推 firejox: long 与long long 的大小规范都是至少几byte,不是固定03/21 15:06
2F:→ firejox: 几byte03/21 15:06
3F:→ firejox: 标准没规定long == long long03/21 15:08
所以跟作业系统也有关罗?
4F:→ sarafciel: 在32bit的年代long是4个byte喔 更早还有int是2byte的03/21 15:17
5F:→ sarafciel: 所以要4byte有号整数的准确写法是signed int32_t03/21 15:20
6F:推 chuegou: 请爱用uint64_t 03/21 16:24
豪
※ 编辑: nevikw39 (101.137.38.17), 03/21/2019 17:44:10
8F:→ 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
10F:→ tinlans: 你试试 visual c++ 03/21 20:26
11F:推 suhorng: 64 位元也有 LP64 跟 ILP 64 两种, 一个 int 32 位一个 03/21 21:07
12F:→ suhorng: 64 位. 03/21 21:11
13F:→ loveme00835: 这就是为什麽需要 sizeof() operator, 不然都照你的 03/21 21:16
14F:→ loveme00835: 想像 hard-code 就好啦 03/21 21:16
15F:推 lc85301: 写 arduino 就会遇到 int 2bytes 了 03/21 22:07
16F:推 eye5002003: 要是这语言打一开始就都用stdint.h里的东西就好了 03/21 22:13
17F:→ loveme00835: stdint.h 也是要看平台的, 不是每个平台都要支援全部 03/21 22:17
18F:→ aelin: long 至少32bit,long long至少是64bit而int大小和平台有关 03/23 00:44
19F:→ uranusjr: 没办法 C 标准制定的那年代这样订最方便, 大家一起还债 03/23 12:29
20F:→ uranusjr: 现在出来的新语言通常就会直接订死位元数了 03/23 12:31
21F:→ F04E: 请爱用cstdint 03/25 18:41