• 不用任何比较运算符找出两个整数中的较大的值


    这是 牛客网的一道面试题[1]

    给定两个32位整数a和b,返回a和b中较大的,要求不能用任何比较判断运算符。


    如果可以用标注库, 那首先想到可以用sort包进行排序:

    package main

    import (
     "fmt"
     "sort"
    )

    func main() {

     var a, b = 123126

     sli := make([]int0)
     sli = append(sli, a, b)

     sort.Ints(sli)

     fmt.Println("其中较大的数为:", sli[1])

    }
    • 1

    但一般情况下,不会让使用sort包。


    另一种思路:

    a和b做差,如果能得知差的正负号,则也可以得出a,b谁大谁小

    (未考虑a-b可能溢出的情况)

    package main

    import "fmt"

    func main() {

     var a, b = 123126

     c := a - b

     scA := sign(c)
     scB := flip(scA)

     fmt.Println("较大的数为:", a*scA+b*scB)

    }

    // 取反操作。即异或操作 (位取反也称位异或,一般用~或者^。Go用后者);  当两数不同时,结果为1;两数相同时,结果为0
    func flip(n int) int {
     return n ^ 1
    }

    func sign(n int) int {
     return flip((n >> 31) & 1)
    }
    • 1

    原码、反码、补码与位运算[2]


    不用任何比较判断找出两个数中较大的[3]

    参考资料

    [1]

    一道面试题: https://www.nowcoder.com/practice/02ae5ccb63064bbdb2366417d8b70ff3

    [2]

    原码、反码、补码与位运算: https://dashen.tech/2015/07/25/%E5%8E%9F%E7%A0%81%E3%80%81%E5%8F%8D%E7%A0%81%E3%80%81%E8%A1%A5%E7%A0%81%E4%B8%8E%E4%BD%8D%E8%BF%90%E7%AE%97/

    [3]

    不用任何比较判断找出两个数中较大的: https://blog.csdn.net/liwei1205/article/details/78421309

    本文由 mdnice 多平台发布

  • 相关阅读:
    matplotlib显示图表图例
    JSONObject将json字符串转成java嵌套对象
    Power BI vs Superset BI 调研报告
    读书笔记之C Primer Plus 2
    .NET Core多线程 (1) Thread与Task
    【无标题】
    react库的基础学习
    Liunx常用命令
    CPT205 Lab1 Code Collection
    本地加载hugging face模型:Bert
  • 原文地址:https://blog.csdn.net/techdashen/article/details/132838113