mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 03:22:24 -05:00 
			
		
		
		
	
		
			
	
	
		
			30 lines
		
	
	
	
		
			757 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
	
		
			757 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package bitutil | ||
|  | 
 | ||
|  | // Abs8 returns the absolute value of i (calculated without branching). | ||
|  | func Abs8(i int8) int8 { | ||
|  | 	const bits = 8 | ||
|  | 	u := uint64(i >> (bits - 1)) | ||
|  | 	return (i ^ int8(u)) + int8(u&1) | ||
|  | } | ||
|  | 
 | ||
|  | // Abs16 returns the absolute value of i (calculated without branching). | ||
|  | func Abs16(i int16) int16 { | ||
|  | 	const bits = 16 | ||
|  | 	u := uint64(i >> (bits - 1)) | ||
|  | 	return (i ^ int16(u)) + int16(u&1) | ||
|  | } | ||
|  | 
 | ||
|  | // Abs32 returns the absolute value of i (calculated without branching). | ||
|  | func Abs32(i int32) int32 { | ||
|  | 	const bits = 32 | ||
|  | 	u := uint64(i >> (bits - 1)) | ||
|  | 	return (i ^ int32(u)) + int32(u&1) | ||
|  | } | ||
|  | 
 | ||
|  | // Abs64 returns the absolute value of i (calculated without branching). | ||
|  | func Abs64(i int64) int64 { | ||
|  | 	const bits = 64 | ||
|  | 	u := uint64(i >> (bits - 1)) | ||
|  | 	return (i ^ int64(u)) + int64(u&1) | ||
|  | } |