当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust u32.carrying_mul用法及代码示例


本文简要介绍rust语言中 u32.carrying_mul 的用法。

用法

pub fn carrying_mul(self, rhs: u32, carry: u32) -> (u32, u32)

计算“full multiplication” self * rhs + carry 而不会溢出。

这会将结果的低位(包装)位和high-order(溢出)位按顺序作为两个单独的值返回。

执行“long multiplication”,它接受额外的添加量,并可能返回额外的溢出量。这允许将多个乘法链接在一起以创建表示较大值的“big integers”。

例子

基本用法:

请注意,此示例在整数类型之间共享。这就解释了为什么在这里使用u32

#![feature(bigint_helper_methods)]
assert_eq!(5u32.carrying_mul(2, 0), (10, 0));
assert_eq!(5u32.carrying_mul(2, 10), (20, 0));
assert_eq!(1_000_000_000u32.carrying_mul(10, 0), (1410065408, 2));
assert_eq!(1_000_000_000u32.carrying_mul(10, 10), (1410065418, 2));
assert_eq!(u32::MAX.carrying_mul(u32::MAX, u32::MAX), (0, u32::MAX));

如果 carry 为零,这类似于 overflowing_mul ,只是它给出了溢出的值,而不仅仅是是否发生了溢出:

#![feature(bigint_helper_methods)]
let r = u8::carrying_mul(7, 13, 0);
assert_eq!((r.0, r.1 != 0), u8::overflowing_mul(7, 13));
let r = u8::carrying_mul(13, 42, 0);
assert_eq!((r.0, r.1 != 0), u8::overflowing_mul(13, 42));

返回的元组中第一个字段的值与您通过组合 wrapping_mul wrapping_add 方法获得的值相匹配:

#![feature(bigint_helper_methods)]
assert_eq!(
    789_u16.carrying_mul(456, 123).0,
    789_u16.wrapping_mul(456).wrapping_add(123),
);

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 u32.carrying_mul。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。