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

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

"

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

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

复制代码
package main

import (
 "fmt"
 "sort"
)

func main() {

 var a, b = 123, 126

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

 sort.Ints(sli)

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

}

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

另一种思路:

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

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

复制代码
package main

import "fmt"

func main() {

 var a, b = 123, 126

 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)
}

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

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

参考资料

1

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

2

原码、反码、补码与位运算: https://dashen.tech/2015/07/25/原码、反码、补码与位运算/

3

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

本文由mdnice多平台发布

相关推荐
明月_清风15 分钟前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
hsfxuebao3 小时前
Loop Engineering 保姆级教程 + 项目实战
人工智能·后端
打工仔折腾 AI3 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
架构技术专栏3 小时前
交叉熵:AI 怎样给概率预测打分
后端
IT_陈寒5 小时前
SpringBoot自动配置坑了我一把,原来是这样绕过去的
前端·人工智能·后端
要努力啊4695 小时前
用 Codex 加速 Java 开发:从代码生成到测试覆盖的完整实战
后端
dora5 小时前
LangChain4j 新手入门实战教程(Java版)
后端·langchain·agent
蜗牛互联网5 小时前
MongoDB Atlas Agent Engine之后,如何用版本门禁防止陈旧写入
java·数据库·人工智能·后端·mongodb
付威20236 小时前
Rust 生命周期:为什么要有它,实际代码里到底怎么用?
后端
海岳云舟6 小时前
spring使用kafka的三种方式(listener、container、stream)
后端