在 C 中,数字"大于"或"小于"比较是不是比"不等于"比较运算效率要高些? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
nnegier
V2EX    程序员

在 C 中,数字"大于"或"小于"比较是不是比"不等于"比较运算效率要高些?

  •  
  •   nnegier 320 天前 2671 次点击
    这是一个创建于 320 天前的主题,其中的信息可能已经有所发展或是发生改变。
    14 条回复    2024-12-10 13:43:36 +08:00
    glacer
        2
    glacer  
       320 天前
    大于小于不等于都有对应的汇编指令,都是一个 cpu 指令操作,理论上效率一样。
    chendy
        3
    chendy  
       320 天前
    @xtreme1 唤醒了十多年前汇编课程上用汇编写排序的痛苦回忆
    InkStone
        4
    InkStone  
       320 天前   1
    这种简单的数字比较的效率就操心了,常见编译器都会给你优化好的。

    按语义写就行了
    FYFX
        5
    FYFX  
       320 天前
    没啥区别吧,x86 应该都是 cmp ,cmp 就是做减法然后检查 flag
    billccn
        6
    billccn  
       320 天前
    大多数构架上只有和 0 比较的操作比非 0 的要省一个减法,其他不管是那种比较耗时都是一模一样的。另外比较操作属于 ALU 执行的,通常就一个时钟周期,这个和比较后面要进行的分支相比属于小巫见大巫,不要去想着优化比较。
    009694
        7
    009694  
       320 天前 via iPhone
    我感觉当你真需要考虑比较大于和大于等于效率问题的时候 你的代码甚至不应该用 c 了
    yankebupt
        8
    yankebupt  
       320 天前   1
    汇编有 JNZ
    其实 1 楼说得好,分支才是要考虑的
    关键是跳转,如果跳转分支预测的 cache miss 了,会打断流水线 cpu 去外层 cache 读数据读指令(你用 C 一般程序不大还好,要是要去内存读东西那就不是几个时钟周期能解决的问题了,非常惨),一堆时钟周期就这么出去了……
    aminobody
        9
    aminobody  
       320 天前
    没区别, 请见汇编
    https://godbolt.org/z/bdMzh6j9K
    shiltian
        10
    shiltian  
       319 天前
    compiler 会优化的,所以无需担心这种问题
    Austaras
        11
    Austaras  
       319 天前
    sufficiently smart compiler.jpg
    flyqie
        12
    flyqie  
       319 天前 via Android
    有点好奇,是什么场景让你考虑到这个?

    还是说只是闲来无事灵机一动?
    nnegier
        13
    nnegier  
    OP
       313 天前 via Android
    @flyqie 书,因为它在无序序列的时候用不等于,在有序序列的时候突然用了大于小于
    nnegier
        14
    nnegier  
    OP
       313 天前 via Android
    @flyqie 一所 211 大学用的教材书,清华大学出版社,纯满足你的好奇心,千万别回复我,这个话题结了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2677 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 126ms UTC 14:36 PVG 22:36 LAX 07:36 JFK 10:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86