C_and_CPP 板


LINE

※ 引述《wtchen (没有存在感的人)》之铭言: : : INT_MIN -2147483647 // compiler实作时最小值不可大於 -(2147483648-1) : ^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^ : INT_MAX 2147483647 // compiler实作时最小值不可小於 (2147483648-1) : ^^^^^^^^^^^^ ^^^^^^^^^^^^^^ : 不过由於32bit能显示的范围就是2**32种,所以一般作业系统会把 : ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ : INT_MIN多减去1,也就是int 的显示范围为-2147483648 ~ +2147483647。 : 当程式跑到abs(-2147483648)>0时,由於int不存在2147483648, : 於是正确结果无法被有限的数位显示(undefined behavior) 解释奇怪的地方 :         ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ 不知道这样有没有比较好:   INT_MIN = -2147483648   INT_MAX = 2147483647   由於 integer literal 会被视为 int 整数型态   所以 #define INT_MIN -2147483648 是行不通的(超过 int 上界)   因此编译器标头档实作时可以定义成 #define INT_MIN (-INT_MAX - 1) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.68.118
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1465371461.A.A9C.html ※ 编辑: Hazukashiine (140.113.68.118), 06/08/2016 15:44:49
1F:推 LPH66: 这里其实还牵扯到一个细节是 C/C++ 没有负的 literal 06/08 15:45
2F:→ LPH66: 所以直接写 -2147483648 基本上是行不通的 06/08 15:45
嗯 没错 我再编辑补充一下 www
3F:→ LPH66: 我好一阵子前写了一个小题目来讲解这回事: 06/08 15:52
4F:→ LPH66: https://paste.plurk.com/show/2283249/ 06/08 15:53
5F:推 wtchen: 我这边列的INT_MIN/INT_MAX是Standard制定的 06/08 16:38
哪一份的 Standard 定义 INT_MIN 是 -2147483647 了?
6F:→ wtchen: 当然OS实作或user define可以有别的方法 06/08 16:38
还有 INT_MIN 定义跟 OS 实作有什麽关系?是编译器标头档实作。 还有置底的 C/C++ 语言新手十三诫有很多用词没有很精确的地方。
7F:推 wtchen: 一般linux会做成#define INT_MIN (-INT_MAX - 1) 06/08 16:48
8F:→ wtchen: 稍微改了一下.... 06/08 16:51
9F:→ wtchen: 看看有没有好些.... 06/08 17:23
10F:推 yvb: 如果你去看C99/C11 Standard,你会发现long int (4 bytes)... 06/08 21:53
11F:→ yvb: INT_MIN... 06/08 21:53
12F:→ yvb: 为何我看到的, long int 应该是对应 LONG_MIN 和 LONG_MAX ? 06/08 21:54
13F:→ yvb: 然後 int 才是对应 INT_MIN 和 INT_MAX ... @@ 06/08 21:55
14F:→ yvb: 如果 ... "long int" <== 原文 488 行. 06/08 22:08
15F:→ yvb: 然後C99/C11中, INT_MIN/INT_MAX 的 "范例" 是 -32767/+32767 06/08 22:13
好神奇... http://www.cplusplus.com/reference/climits/ 就是保证 int 至少有 2 bytes 那麽大,而不是 4 bytes... ※ 编辑: Hazukashiine (140.113.68.118), 06/08/2016 22:19:08
16F:推 wtchen: 一开始我也发现这点,所以如果有人更早看到我的更新会发现 06/08 22:21
17F:推 wtchen: 我一开始是用short作例子(因为int有int跟long int两种) 06/08 22:22
18F:→ wtchen: 不过short好像不存在abs,所以才改用int(汗) 06/08 22:22
19F:→ wtchen: 我还是把例子改成long好了(汗) 06/08 22:25
20F:→ wtchen: 不过long有一样的问题,64bit是8byte 06/08 22:26
21F:推 wtchen: 改成long了,这次应该好多了 06/08 22:31
22F:推 wtchen: 用字我也想尽量精准,所以有任何意见请不吝指正 06/08 22:37
嗯嗯 看起来蛮认真编辑的 晚一点再指出是哪边吧 QQ ※ 编辑: Hazukashiine (140.113.68.118), 06/08/2016 22:58:56
23F:推 yvb: 嗯. C99/C11 的 5.2.4.2.1 提到是 implementation-defined, 06/08 23:11
24F:→ yvb: 而数值的绝对值要大於等於该值(比方INT_MAX不可小於+32767). 06/08 23:12
25F:推 wtchen: Standard给的都是"范围至少要怎样",编译器实作只要比较大 06/08 23:24
26F:→ wtchen: 就OK(我有特别注明) 06/08 23:25
27F:→ wtchen: 但是因为范围不对称(差1的情况下)造成像abs这样突然超过 06/08 23:25
28F:→ wtchen: 范围的情况下会出现啥就是未定义 06/08 23:26
29F:推 yvb: 嗯, 因为提到 standard, 就应该照抄, 不能乱改数值 :P 06/08 23:32
30F:→ yvb: 另外, (4 bytes) 也许可以改移到备注, 说明在多数 16-bits 06/08 23:32
31F:→ yvb: 和 32-bits 编译器可能采用; 而 64-bits 可能不同之类. 06/08 23:33
32F:→ wtchen: 因为我手上只有Linux-64bit,Win我不熟不知道状况是否不同 06/08 23:34
33F:→ wtchen: 16bit...我多久没用了.... 06/08 23:35
34F:→ wtchen: 把16/32/64bit的可能情形加进去了 06/08 23:40
35F:→ wtchen: 各位教训的是.... 06/09 01:08







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP