mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-25 13:16:40 +00: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)
|
||
|
}
|