• 不用判断语句比较两个数字大小


    如题,网上有很多解决方案,在这里,罗列一下,留作后看。

    1、平均值求法

     1 //将取两个数的差的绝对值加上两个数,那么得到的就是大的那个数的两倍,这样除以二就得到了大的那个值
     2 
     3 int getmax(int a, int b)
     4 {
     5     return (a + b + abs(a - b)) / 2;
     6 }
     7 
     8 //同样,减去两数的和减去两倍差的绝对值, 再除以二,就得到小的那个数:
     9 
    10 int getmin(int a, int b)
    11 {
    12     return (a + b - abs(a - b) * 2) / 2;
    13 }

    2、移位法

     1 //将两个数的差进行移位,向右移31位,如果得到的值为1,那么被减数大,反之减数大,当然得到大小值就有两种方法,一种是数组,一种是switch返回:
     2 //为什么移31位,数字如果是负数,那么是以补码的形式存储的,右移之后得到的就是最高位的值,如果是1,那么说明这个差是负数,如果是0,那么这个差是正数
     3 //以下是用数组
     4 int getmax(int a, int b)
     5 {
     6     int buff[2] = { a, b };
     7     unsigned int z = a - b;
     8     z = z >> 31;
     9     return buf[z];
    10 }
    11 
    12 int getmin(int a, int b)
    13 {
    14         int buff[2] = { a, b };
    15     unsigned int z = a - b;
    16     z = z >> 31;
    17     return buf[abs(z - 1)];
    18 }    
    19 
    20 
    21 //一下是用switch判断来返回(当然,如果允许用switch的话)
    22 int getmax(int a, int b)
    23 {
    24         int buff[2] = { a, b };
    25     unsigned int z = a - b;
    26     z = z >> 31;
    27     switch (z)
    28     {
    29     case 0:
    30         return a;
    31         break;
    32     case 1:
    33         return b;
    34         break;
    35     }
    36 }

    移位法得到结果也有好几种,将差和1进行&操作,也能得到一个结果。

    细节处见真章啊!

  • 相关阅读:
    MVC.Net:Razor指定模板
    Intellij Idea 13:导入openfire源代码
    SharePoint 2013:解决爬网出错的问题
    MySQL:解决MySQL无法启动的问题
    SharePoint 2013:解决添加域名后每次都需要登录的问题
    Android 动画
    android:persistent属性
    ubuntu 安装 open in teminal
    利用python建表
    flask request
  • 原文地址:https://www.cnblogs.com/leisc/p/3838737.html
Copyright © 2020-2023  润新知