免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: glq2000
打印 上一主题 下一主题

为何 #define ISUNSIGNED(a) (a>=0 && ~a>=0) 有问题(判断是否有符号) [复制链接]

论坛徽章:
0
51 [报告]
发表于 2012-04-03 22:51 |只看该作者
#define ISUNSIGNED(a) (a >=0 && (a=~a,a >=0 ? (a=~a,1)a=~a,0)))

http://www.cnblogs.com/xkfz007/archive/2012/03/27/2420172.html

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
52 [报告]
发表于 2012-04-04 08:35 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
53 [报告]
发表于 2012-04-04 22:25 |只看该作者
回复 52# pmerofc


    回答的时候,是错的,请具体指出来,我贴的这一句是完全可以工作的。

    分析一下。

    a > 0      无论a是什么类型,都不会发生类型提升,因为a的类型是确定的。 对应的汇编可以是 cmpb, cmpw, cmpl

    ~a >0     因为是在寄存器中操作(32位),这时汇编首先会生成一个扩展语句,movzbl S,D 或 movsbl S,D,
                 接着就是类型提升,再就是用cmpl来比较了。

具体的大家可以自己汇编一下。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
54 [报告]
发表于 2012-04-04 23:09 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
55 [报告]
发表于 2012-04-04 23:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
56 [报告]
发表于 2012-04-04 23:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
57 [报告]
发表于 2012-04-08 11:18 |只看该作者
C语言只是为我们提供了一个理解系统的工具。

C语言-----gcc-----> asm ----> binary ---> 被机器理解

C语言----->标准 ----> 被人理解


asm 与标准,这二者有相同的地方,都是工具,比较中前行,当然也是可以的。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
58 [报告]
发表于 2012-04-08 14:23 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
59 [报告]
发表于 2012-04-08 14:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
60 [报告]
发表于 2012-04-09 21:33 |只看该作者
回复 59# pmerofc


    你可以 wiki 一下, 到底是先有C还是先有标准。天朝的某些程序员总是问“到底先有C,还是先有标准”
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP