package main
import (
"fmt"
)
const INT_MAX = int(^uint(0) >> 1)
// 0000 0000 => 1111 1111 => (int)0111 1111
const INT_MIN = ^INT_MAX // 0111 1111 => 1000 0000
func main() {
var arr = [5]int{1, 3, 3, 9, 2}
var minNum [2]int
minNum[0] = INT_MAX
minNum[1] = INT_MIN
for i := 0; i < len(arr); i++ {
if minNum[0] > arr[i] {
minNum[1] = minNum[0] //出现更小的,赋给[0],原来的赋给[1]
minNum[0] = arr[i]
} else if minNum[1] > arr[i] { //出现比第二小的,小的
minNum[1] = arr[i]
}
}
fmt.Println(minNum[1])
}
遍历一遍就可以了,找到最小的值赋给minNum[0],第二小的赋给[1]。
const INT_MAX = int(^uint(0) >> 1)
无符号 int 0的补码,先取反,再右移一位,强转,成有符号 int。即为最大值 int。
0000 0000 => 1111 1111 => (int)0111 1111
最大值取反,得到最小值的补码。原码是 - 1111111…
0111 1111 => 1000 0000
版权声明:本文为weixin_44883180原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。