本文简要介绍rust语言中 u64.carrying_mul
的用法。
用法
pub fn carrying_mul(self, rhs: u64, carry: u64) -> (u64, u64)
计算“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!(u64::MAX.carrying_mul(u64::MAX, u64::MAX), (0, u64::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 u64.carrying_add用法及代码示例
- Rust u64.checked_log用法及代码示例
- Rust u64.checked_next_power_of_two用法及代码示例
- Rust u64.checked_add用法及代码示例
- Rust u64.checked_mul用法及代码示例
- Rust u64.checked_sub用法及代码示例
- Rust u64.count_ones用法及代码示例
- Rust u64.checked_log10用法及代码示例
- Rust u64.checked_shr用法及代码示例
- Rust u64.checked_next_multiple_of用法及代码示例
- Rust u64.checked_pow用法及代码示例
- Rust u64.checked_rem_euclid用法及代码示例
- Rust u64.checked_add_signed用法及代码示例
- Rust u64.checked_rem用法及代码示例
- Rust u64.checked_shl用法及代码示例
- Rust u64.checked_log2用法及代码示例
- Rust u64.count_zeros用法及代码示例
- Rust u64.checked_div_euclid用法及代码示例
- Rust u64.checked_neg用法及代码示例
- Rust u64.checked_div用法及代码示例
- Rust u64.rotate_right用法及代码示例
- Rust u64.overflowing_mul用法及代码示例
- Rust u64.log用法及代码示例
- Rust u64.overflowing_sub用法及代码示例
- Rust u64.from_le_bytes用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 u64.carrying_mul。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。