當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust usize.carrying_mul用法及代碼示例


本文簡要介紹rust語言中 usize.carrying_mul 的用法。

用法

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

計算“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!(usize::MAX.carrying_mul(usize::MAX, usize::MAX), (0, usize::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大神的英文原創作品 usize.carrying_mul。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。