我们如何比较两个整数?

Skiv Hisink

我最近写了一个对数组排序的程序。为此,我需要编写一个比较函数,并将其传递给它。我的比较函数应该返回1(如果x> y),-1(如果x <y)或0(如果x = y)。我使用条件表达式编写了一个正则函数(功能1),但建议我编写不同的内容(功能2)。这样写更好吗?布尔条件是否会始终为真返回1?(我的意思是,如果x = 0和y = 0,我们将总是(x == y)== 1吗?)

功能一:

int Icmp(void* x, void* y)
{
    int a = *(int*)x;
    int b = *(int*)y;
    if (a > b)
        return 1;
    else if (a < b)
        return -1;
    else
        return 0;
}

功能2:

int Icmp(void* x, void* y)
{
    return (*(int*)x > * (int*)y) - (*(int*)x < *(int*)y);
}
安蒂·哈帕拉(Antti Haapala)

编写非分支代码的首选方法是对操作数使用局部变量:

int icmp(const void *x, const void *y)
{
    int a = *(const int *)x;
    int b = *(const int *)y;
    return (a > b) - (a < b);
}

该表达式是比较函数中的一个常见习语,如果使用变量而不是就地指针取消引用来编写,则该表达式也很易读。

该代码依赖于以下事实:使用><或什至为1或0==的类型的比较结果。int这是C标准所必需的-根据定义,生成诸如42或-1之类的值的任何编译器都不是C编译器。

很容易看到最大。中的一个a > ba < b能够在给定时间是真实的,并且结果是任一1 - 00 - 10 - 0

关于无分支代码的原因-尽管编译器可能会为两个函数生成完全相同的代码,但它们通常不会。例如,最新的GCCICC似乎都为x86-64上的第一个功能生成了一个分支,但为后者有条件执行的无分支代码。对于任何说分支无关紧要的人,那么我将向您介绍Stack Overflow上投票最高的QA

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们如何比较两个不同文件中的两个列表?

来自分类Dev

我们如何在Java中比较两个hashmap

来自分类Dev

我们如何比较python中的两个对象和SQL的数据内容?

来自分类Dev

当我们在while循环中给两个比较运算符时,python如何理解?

来自分类Dev

我们如何比较三个整数以找出更大或更小的一个?

来自分类Dev

我们如何合并两个具有分组条件和两个条件的查询的结果

来自分类Dev

我们如何合并两个instagram API的结果

来自分类Dev

我们如何复制两个均由Marshal.AllocHGlobal分配的缓冲区?

来自分类Dev

我们如何从两个或多个表中获取Cakephp层次结构中的数据

来自分类Dev

我们如何在React jsx中添加两个不同的值

来自分类Dev

我们如何交换数组中的两个元素?

来自分类Dev

我们如何在Java中并行运行两个线程

来自分类Dev

我们如何一一交替显示两个ng-repeat

来自分类Dev

我们如何获取MongoTemplate中两个限制之间的列值?

来自分类Dev

我们如何合并两个instagram API的结果

来自分类Dev

我们如何在单独的页面上同步两个画布元素

来自分类Dev

我们如何计算两个坐标之间的距离。ArangoDB

来自分类Dev

我们如何从 codeigniter 中的模型中获取数组的两个值

来自分类Dev

我们如何产生数字 xy,其中 x 和 y 是两个参数或函数?

来自分类Dev

在PostgreSQL中,我们可以直接比较两个带有不同时区的时间戳吗?

来自分类Dev

我们可以在 Java8 中对两个不同的 Streams 执行比较操作吗?

来自分类Dev

我如何比较两个对象

来自分类Dev

我们如何在SDL_Event(一个并集)中分配两个值?

来自分类Dev

您将如何实现一个在两个日期之间给我们几个月的函数?

来自分类Dev

我们如何将两个以上的对象数组合并为一个对象数组

来自分类Dev

无论如何,我们可以使用ShouldMatchers在Scalatest中给出两个条件

来自分类Dev

当我们有两个选择器时,Sling如何解析脚本?

来自分类常见问题

我们如何在Django中从数据库中随机获取两个以上的用户?

来自分类Dev

我们如何在python的“ openpyxl”包中绘制两个系列的数据(折线图)

Related 相关文章

  1. 1

    我们如何比较两个不同文件中的两个列表?

  2. 2

    我们如何在Java中比较两个hashmap

  3. 3

    我们如何比较python中的两个对象和SQL的数据内容?

  4. 4

    当我们在while循环中给两个比较运算符时,python如何理解?

  5. 5

    我们如何比较三个整数以找出更大或更小的一个?

  6. 6

    我们如何合并两个具有分组条件和两个条件的查询的结果

  7. 7

    我们如何合并两个instagram API的结果

  8. 8

    我们如何复制两个均由Marshal.AllocHGlobal分配的缓冲区?

  9. 9

    我们如何从两个或多个表中获取Cakephp层次结构中的数据

  10. 10

    我们如何在React jsx中添加两个不同的值

  11. 11

    我们如何交换数组中的两个元素?

  12. 12

    我们如何在Java中并行运行两个线程

  13. 13

    我们如何一一交替显示两个ng-repeat

  14. 14

    我们如何获取MongoTemplate中两个限制之间的列值?

  15. 15

    我们如何合并两个instagram API的结果

  16. 16

    我们如何在单独的页面上同步两个画布元素

  17. 17

    我们如何计算两个坐标之间的距离。ArangoDB

  18. 18

    我们如何从 codeigniter 中的模型中获取数组的两个值

  19. 19

    我们如何产生数字 xy,其中 x 和 y 是两个参数或函数?

  20. 20

    在PostgreSQL中,我们可以直接比较两个带有不同时区的时间戳吗?

  21. 21

    我们可以在 Java8 中对两个不同的 Streams 执行比较操作吗?

  22. 22

    我如何比较两个对象

  23. 23

    我们如何在SDL_Event(一个并集)中分配两个值?

  24. 24

    您将如何实现一个在两个日期之间给我们几个月的函数?

  25. 25

    我们如何将两个以上的对象数组合并为一个对象数组

  26. 26

    无论如何,我们可以使用ShouldMatchers在Scalatest中给出两个条件

  27. 27

    当我们有两个选择器时,Sling如何解析脚本?

  28. 28

    我们如何在Django中从数据库中随机获取两个以上的用户?

  29. 29

    我们如何在python的“ openpyxl”包中绘制两个系列的数据(折线图)

热门标签

归档