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

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

这是 牛客网的一道面试题

给定两个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)
}
目录
相关文章
|
移动开发 JavaScript 前端开发
如何处理 h5 使用 iframe 嵌套页面,内外 viewport 不一致导致的缩放问题?
如何处理 h5 使用 iframe 嵌套页面,内外 viewport 不一致导致的缩放问题?
1971 0
|
供应链 小程序 物联网
B2B2C、C2F、S2B2b2C、O2O、S2B2C和各种的模式缩写解释说明
B2B2C、C2F、S2B2b2C、O2O、S2B2C和各种的模式缩写解释说明
3122 0
B2B2C、C2F、S2B2b2C、O2O、S2B2C和各种的模式缩写解释说明
|
SQL JavaScript 前端开发
学生管理系统Element UI版(上)
搭建环境 创建vue项目:vue create day16_element_student 安装第三方组件:axios、element
153 0
|
9月前
「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
本篇将带你实现一个带有闪烁动画的按钮交互效果。通过动态改变按钮颜色,用户可以在视觉上感受到按钮的闪烁效果,提升界面互动体验。
211 19
「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
|
存储 关系型数据库 MySQL
表设计的10条军规
本文主要介绍了数据库建表的18个小技巧,包括:名字的命名规范、字段类型的选取、字段长度的控制、外键的使用、索引的创建、主键的选择、字段个数的限制、存储引擎的选择、时间字段的处理、金额字段的保存、冗余字段的使用以及注释的添加。作者强调了命名的重要性,如使用小写字母、避免全大写、使用下划线分隔等,并提倡使用NOT NULL和默认值,合理选择字段类型如datetime、decimal等,以及避免使用过多的字段和索引。此外,还提到了字符集和排序规则的选择,以及大字段和冗余字段的处理。
335 1
|
11月前
|
存储 算法 C++
【C++打怪之路Lv10】-- list
【C++打怪之路Lv10】-- list
82 1
|
运维 Serverless API
Serverless 应用引擎产品使用合集之如何使用PHP SDK调用函数并在请求体(body)中传递字符串
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
基于OFDM的通信系统模拟实现
基于OFDM的通信系统模拟实现
196 2
实现简易手风琴样式
蓝桥最新一期的楼赛是实现手风琴样式,这个我们可以考虑到几个解决方案,我们先来看题
154 1
实现简易手风琴样式
|
XML 小程序 JavaScript
nodejs实现微信小程序支付功能及相关问题总结
最近使用nodejs作为服务器,搭建了一个微信小程序。其中的微信支付功能是比较复杂的一部分。不过只要我们能掌握微信支付的工作流程,那实现这个功能也不会很难的。下面分享此次微信支付的实现经历。