package main
import "math/bits"
func main() {
{ // example 1
var n uint = 4294967295
q, r := bits.Div(0, n, 2)
println(q == n / 2, r == 1)
}
{ // example 2
var n uint32 = 4294967295
q, r := bits.Div32(0, n, 2)
println(q == n / 2, r == 1)
}
}
如果你有一个64位的数字,你可以这样做:
package main
import "math/bits"
func main() {
var n uint64 = 18446744073709551615
q, r := bits.Div64(0, n, 2)
println(q == n / 2, r == 1)
}
如果您有大于64位的内容,您可以这样做:
package main
import "math/bits"
func main() {
q, r := bits.Div64(1, 0, 2)
println(q == 9223372036854775808, r == 0)
}
//QuotientAndRemainderF32 Computes the integer quotient and the remainder of the inputs. This function rounds floor(x/y) to the nearest integer towards -inf.
func QuotientAndRemainderF32(x, y float32) (Remainder, Quotient float32) {
Quotient = float32(math.Floor(float64(x / y)))
Remainder = x - y*Quotient
return Remainder, Quotient
}
func DivMod(n, d int64) (q, r int64) {
q = n / d
r = n % d
// the numerator or the denominator is negarive (but not both)
if r != 0 && n*d < 0 {
q--
r += d
}
return
}
5条答案
按热度按时间5sxhfpxr1#
整数除法加模数可以实现这一点。
https://play.golang.org/p/rimqraYE2B
编辑:定义
在整数除法的上下文中,Quotient是 whole 乘以分子进入分母的数目。换句话说,它与decimal语句相同:第一个月
Modulo给出了这样一个除法的 * 余数 *。分子和分母的模总是介于0和d-1之间(其中d是分母)
5gfr0r5j2#
如果需要一行程序,
wqnecbli3#
如果您有一个32位的数字,您可以使用以下之一:
如果你有一个64位的数字,你可以这样做:
如果您有大于64位的内容,您可以这样做:
cwtwac6a4#
我做了这个功能,也许这就是你要找的。
gc0ot86w5#
我认为这个问题并不清楚:您是在寻找与Python
divmod
等效的函数,还是仅仅是一个返回商和余数的函数?这些解决方案并不等同于Python
divmod
,因为它们返回的是余数而不是模数,因此,它们对负数的处理方式不同。在Python中,
divmod(-7, 4)
返回-2, 1
,这里的答案返回-1, 3
。我的建议是