You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			110 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			110 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
| package tools
 | |
| 
 | |
| import (
 | |
| 	"math/rand"
 | |
| )
 | |
| 
 | |
| func ABS(num int32) int32 {
 | |
| 	y := num >> 31
 | |
| 	return (num ^ y) - y
 | |
| }
 | |
| 
 | |
| func Int64Merge(h, l int32) (id int64) {
 | |
| 	return int64(uint64(h)<<32 | uint64(l))
 | |
| }
 | |
| 
 | |
| func Int64Split(id int64) (h, l int32) {
 | |
| 	return int32(uint64(id) >> 32), int32(uint32(id))
 | |
| }
 | |
| 
 | |
| func Int32Merge(h, l int16) (id int32) {
 | |
| 	return int32(uint32(h)<<16 | uint32(l))
 | |
| }
 | |
| 
 | |
| func Int32Split(id int32) (h, l int16) {
 | |
| 	return int16(uint32(id) >> 16), int16(uint16(id))
 | |
| }
 | |
| 
 | |
| func UInt16Merge(h, l uint8) (id uint16) {
 | |
| 	return uint16(h)<<8 | uint16(l)
 | |
| }
 | |
| 
 | |
| func UInt16Split(id uint16) (h, l uint8) {
 | |
| 	return uint8(id >> 8), uint8(id)
 | |
| }
 | |
| 
 | |
| //闭区间, 结果不重复
 | |
| func RandBetween(start int, end int, count int) []int {
 | |
| 	existMap := make(map[int]bool)
 | |
| 
 | |
| 	if (end-start)+1 < count {
 | |
| 		count = end - start + 1
 | |
| 	}
 | |
| 
 | |
| 	if end-start == 0 {
 | |
| 		return []int{start}
 | |
| 	}
 | |
| 
 | |
| 	nums := make([]int, 0)
 | |
| 
 | |
| 	for len(nums) < count {
 | |
| 		num := rand.Intn((end-start)+1) + start
 | |
| 		if _, exist := existMap[num]; !exist {
 | |
| 			nums = append(nums, num)
 | |
| 			existMap[num] = true
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return nums
 | |
| }
 | |
| 
 | |
| func MaxInt(a, b int) int {
 | |
| 	if a > b {
 | |
| 		return a
 | |
| 	}
 | |
| 	return b
 | |
| }
 | |
| 
 | |
| func MinInt(a, b int) int {
 | |
| 	if a < b {
 | |
| 		return a
 | |
| 	}
 | |
| 	return b
 | |
| }
 | |
| 
 | |
| func MaxInt32(v int32, others ...int32) int32 {
 | |
| 	for _, other := range others {
 | |
| 		if v < other {
 | |
| 			v = other
 | |
| 		}
 | |
| 	}
 | |
| 	return v
 | |
| }
 | |
| 
 | |
| func MinInt32(v int32, others ...int32) int32 {
 | |
| 	for _, other := range others {
 | |
| 		if v > other {
 | |
| 			v = other
 | |
| 		}
 | |
| 	}
 | |
| 	return v
 | |
| }
 | |
| 
 | |
| func MaxInt64(v int64, others ...int64) int64 {
 | |
| 	for _, other := range others {
 | |
| 		if v < other {
 | |
| 			v = other
 | |
| 		}
 | |
| 	}
 | |
| 	return v
 | |
| }
 | |
| 
 | |
| func MinInt64(v int64, others ...int64) int64 {
 | |
| 	for _, other := range others {
 | |
| 		if v > other {
 | |
| 			v = other
 | |
| 		}
 | |
| 	}
 | |
| 	return v
 | |
| }
 |