tokenpocket安卓app下载|u64
C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)_linux如何打印uint8_t *-CSDN博客
>C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)_linux如何打印uint8_t *-CSDN博客
C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)
最新推荐文章于 2024-01-12 06:04:09 发布
悟空明镜
最新推荐文章于 2024-01-12 06:04:09 发布
阅读量7.9w
收藏
309
点赞数
48
分类专栏:
C学习
文章标签:
打印格式
u64
s64
u32
转载请联系我,否则侵权,谢谢。
本文链接:https://blog.csdn.net/wukongmingjing/article/details/81709429
版权
C学习
专栏收录该内容
2 篇文章
1 订阅
订阅专栏
首先必须知道u8,s8等数据类型的定义:
typedef signed char s8;
typedef unsigned char u8;
typedef signed short s16;
typedef unsigned short u16;
typedef signed int s32;
typedef unsigned int u32;
typedef signed long long s64;
typedef unsigned long long u64;
与体系结构相关的,定义在include/linux/type.h文件中:
/* bsd */
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
/* sysv */
typedef unsigned char unchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
#ifndef __BIT_TYPES_DEFINED__
#define __BIT_TYPES_DEFINED__
typedef __u8 u_int8_t;
typedef __s8 int8_t;
typedef __u16 u_int16_t;
typedef __s16 int16_t;
typedef __u32 u_int32_t;
typedef __s32 int32_t;
#endif /* !(__BIT_TYPES_DEFINED__) */
typedef __u8 uint8_t;
typedef __u16 uint16_t;
typedef __u32 uint32_t;
#if defined(__GNUC__)
typedef __u64 uint64_t;
typedef __u64 u_int64_t;
typedef __s64 int64_t;
对于各种数据类型的打印方式总结如下如下:
数据类型打印格式u8%ds8%du16%d or %hus16%d or %hdu32%us32%du64%llus64%lldint%dunsigned int%ushort int%d or %hdlong%ldunsigned long%lulong long%lldunsigned long long%lluchar%cchar *%sbool (#define stdbool.h)%dunsigned int/int------>十六进制%0xunsigned long/long---->十六进制%0lxlong long/unsigned long long ----->十六进制%0llxunsigned int/int------>八进制%0ounsigned long/long---->八进制%0lolong long/unsigned long long ----->八进制%0llofloat%fdouble%f or %lf科学技术类型(必须转化为double类型)%e限制输出字段宽度%x.yf (x:整数长度,y:小数点长度)
待解问题,在linux kernel里面也有使用bool来定义变量,查看code,定义如下:
typedef _Bool bool;
但是并没有真正找到具体定义在何处,待解。下面是stdbool.h的source code:
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting _Bool in C++ is a GCC extension. */
#define _Bool bool
#if __cplusplus < 201103L
/* Defining these macros in C++98 is a GCC extension. */
#define bool bool
#define false false
#define true true
#endif
#endif /* __cplusplus */
/* Signal that all the definitions are present. */
#define __bool_true_false_are_defined 1
#endif /* stdbool.h */
也大致解释了linux kernel bool type了。 如果大家有兴趣,可以扫码关注我的个人公众号:
优惠劵
悟空明镜
关注
关注
48
点赞
踩
309
收藏
觉得还不错?
一键收藏
知道了
6
评论
C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)
首先必须知道u8,s8等数据类型的定义:typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typedef unsigned short u16; typedef signed int s32; typedef unsigned int u32; typedef...
复制链接
扫一扫
专栏目录
S16自用GM工具.rar
07-16
S16自用GM工具.rar
C语言 打印short、long、long long 和unsigned类型
weixin_42979760的博客
07-04
1万+
《C Primer Plus 》例题解析 程序清单3.4 print2.c程序
6 条评论
您还未登录,请先
登录
后发表或查看评论
C语言用printf()打印u8,u16,u32等参数类型
热门推荐
weixin_44261839的博客
02-24
2万+
想必大家都知道printf打印int 型是用%d,但是u8,u16,u32,u64还有s8,s16,s32,s64是如何打印呢,知道的大佬绕行哈,不知道往下看看。
what is u8?
常见的u8其实是自定义的,定义如下:
typedef signed char s8;
typedef unsigned char u8;
typedef signed short s16;
typedef unsigned short u16;
typedef signed int s32;
【已解决】c++如何打印变量的类型
最新发布
执念斩长河
01-12
478
本博文源于笔者正在编写的c代码,在c/c++中我们经常用auto去接一个变量,这样我们既可以不用知道变量或函数结果的类型,就可以轻松愉快编码,如果想要知道变量的类型呢?那就需要这样一个函数。
c语言printf %llo,c++ 解决无法打印uint8_t 类型变量的问题
weixin_42304279的博客
05-19
3045
将uint8_t 转化为unsigned 类型使用一元运算符+(和- 运算符对应)测试代码如下#include #include #include int main(){std::uint8_t uint8_num = 10;std::cout << "uint8_t num is " << uint8_num << std::endl; //无法打印std::...
基于STM32单片机设计的温湿度采集报警系统软件源代码.zip
06-09
基于STM32单片机设计的温湿度采集报警系统软件源代码
int main(void)
{
s16 i = 0;
u8 sta = 0;
//SysTick_Init();
Delay_init();
UART_Config(115200);
LCD_Show(LCD_Start_UI);
Delay_ms(1000);
BIOS_Check();
LCD_Show(LCD_Menu_UI);
Delay_ms(300);
for(;;)
{
i = DS18B20_Get_Temp();
DHT11_ReadData();
Warning_Beep(i);
Temp_Convert(i);
Hum_Convert(HR);
DrawGraph(i);
sta = !sta;
LED_RUN(sta);
//GPIOB->ODR ^=
c语言 uint8 t printf,printf 整数类型都用 uint8_t
weixin_36053926的博客
05-19
4258
#include #include #include #include #include #include templatestruct STRING{};templatestruct STRING_LITERAL;templatestruct STRING_LITERAL>{static const char s[sizeof...(S)+1];};templateconst char S...
STM32高级开发(12)-在GCC中使用printf打印串口数据
Foresights的博客
02-10
1万+
在大家使用keil或是iar开发stm32等arm芯片的时候,想来最不陌生的就是使用print通过串口输出一些数据,用来调试或是其他作用。但是要明确的是由于keil iar gcc 他们使用的标准C语言库虽然都遵循一个标准,但他们底层的函数实现方式都是不同的,那么在GCC中我们能否像在keil中一样重映射print的输出流到串口上呢?答案是肯定的。
arm-none-eabi-gcc下实现printf的两种方式
会飞的石头
11-01
1214
arm-none-eabi-gcc下实现printf的两种方式
C语言printf()打印8位、16位、32位等有无符号类型参数格式控制备忘录
sunarmy的专栏
09-27
1441
Refer:C语言用printf()打印u8,u16,u32等参数类型_printf输出u8_想扣篮的程序员的博客-CSDN博客
C语言获取变量的类型
dlhlSC的博客
09-03
7640
首先导入头文件
#include
获取变量类型
typeid(var).name()
完整代码
#include
using std::cout;
int main()
{
float var;
cout << typeid(var).name();
return 0;
}
u8_to_u16_u16转u8*_labview_
09-30
u8转u16 小工具,用于数值转换,和大家分享一下,
PCI8757 1MS/s 16位 4路同步模拟量输入.rar
09-13
PCI8757 1MS/s 16位 4路同步模拟量输入rar,※ 16位AD精度,1MS/s采样频率※ 4路差分模拟量输入※ AD缓存:8K字FIFO存储器※ AD量程:±10V、±5V、±2.5V、0~10V、0~5V※ 各通道量程单独可选※ AD触发方式:多种模拟量、数字量触发方式※ 4路同步采集
MuEditorS16.zip_游戏_C/C++__游戏_C/C++_
08-09
MuEditorS16目前支持到S16后续将继续更新
SICK EKS/EKM36 单圈/多圈伺服反馈编码器 选型册.rar
09-26
SICK EKS/EKM36 单圈/多圈伺服反馈编码器 选型册rar,SICK EKS/EKM36 单圈/多圈伺服反馈编码器 选型册
基于51单片机+按键键盘+LCD1602显示+蜂鸣器设计的智能计算器软件源码.rar
05-23
基于51单片机+按键键盘+LCD1602显示+蜂鸣器设计的智能计算器软件源码
实验说明:
根据自己使用的LCD1602是否带有转接板,如果带有转接板的即为4位,需在LCD.H头文件中
将宏#define LCD1602_4PINS打开,我们这里使用的LCD1602是8位,所以默认将该宏注释。
实验接线:
1,LCD1602液晶模块-->单片机管脚
参考LCD1602液晶显示实验接线(开发攻略内在对应的实验章节内实验现象有接线说明)
2,矩阵按键模块-->单片机管脚
参考矩阵按键实验接线(开发攻略内在对应的实验章节内实验现象有接线说明)
3,蜂鸣器模块-->单片机管脚
BEEP-->P20(未使用,用户可自行扩展)
实验现象:
S16 S12 S8 S4分别是123+
S15 S11 S7 S3分别是456-
S14 S10 S6 S2分别是789*
S13 S9 S5 S1分别是0 CLR =
STM32开发踩坑——基于GCC环境下的printf输出重定向
weixin_66861497的博客
06-12
655
GCC环境下printf函数实现机制
【C++】打印uint8_t 对应字符 或者 数字
突围
12-08
3926
大神的分析
产生这种情况的原因是很多c++ 实现中 uint8_t 是 unsigned char 的 typedef。因此cout 实际调用的函数是 ostream& operator<<(ostream&, unsigned char) ,因此实际的执行结果是打印对应的ASCII 码字符,而其字符是不可以打印的。
uint8_t 打印出来是字符
下面是字符对应的数字,
如果给出一个数字,那么打印出来是字符
例子
int BoeHeader::sim_..
gcc对printf的优化
星空千代
03-14
756
在printf输出的是一整行时,gcc将调用puts而不是printf。
#include
int main(void){
printf("hello\n");
return 0;
}
对应汇编代码为
然而,clang将仍然调用printf。
...
C printf u8数据
07-27
- *2* [C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)](https://blog.csdn.net/wuming_422103632/article/details/81709429)[target="_blank" data-report-click={"spm":"1018.2226....
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
悟空明镜
CSDN认证博客专家
CSDN认证企业博客
码龄12年
暂无认证
47
原创
4万+
周排名
145万+
总排名
34万+
访问
等级
3407
积分
213
粉丝
149
获赞
35
评论
789
收藏
私信
关注
热门文章
C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)
79138
使用 git 下载linux kernel源码(主线/稳定、长期演进等版本)
20537
linux kernel insmod模块出现的两个错误以及解决方案
13637
[cpufreq governor] schedutil governor解析
12688
linux kernel soft lockup/hard lockup简介及其解决思路
11282
分类专栏
linux kerne rt scheduler
linux deadline scheduler
ARM相关的一些知识
5篇
linux kernel cfs scheduler
13篇
linux kernel 并发与同步原语
3篇
EAS-调度器学习
13篇
linux kernel PPT
5篇
杂谈
3篇
Android/linux杂学
13篇
git-study-pull/push code
3篇
debug tool
4篇
MTK/QCOM平台相关
1篇
case分析power/performace/thermal
2篇
C学习
2篇
Python学习
linux kernel-并发与同步
2篇
个人感想
最新评论
linux kernel insmod模块出现的两个错误以及解决方案
weixin_43655947:
重新关联module,清理干净重新编译
是指 clean了重新编译?重新关联是什么意思啊
[cpufreq governor]sched governor解析
悟空明镜:
不做调度了,哈哈。好多调度的文章我已经设置私密了。你们看不到了
[cpufreq governor]sched governor解析
静待梅花开:
点赞,继续加油,为后人多留下点宝贵经验
linux kernel insmod模块出现的两个错误以及解决方案
悟空明镜:
需要重新编译kernel,在替换修改后的kernel,最后reboot
linux kernel insmod模块出现的两个错误以及解决方案
wxhlqy:
"在当前linux 系统的kernel源码下修改config文件,CONFIG_MODULE_SIG=n"
这个修改后需要做什么吗,直接重启就行吗
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
[big/little system scheduler]五. big.LITTLE Technology
Linux内核tracepoints
[power]四. Power State Coordination Interface电源管理通用接口
2020年16篇
2019年11篇
2018年22篇
2013年4篇
目录
目录
分类专栏
linux kerne rt scheduler
linux deadline scheduler
ARM相关的一些知识
5篇
linux kernel cfs scheduler
13篇
linux kernel 并发与同步原语
3篇
EAS-调度器学习
13篇
linux kernel PPT
5篇
杂谈
3篇
Android/linux杂学
13篇
git-study-pull/push code
3篇
debug tool
4篇
MTK/QCOM平台相关
1篇
case分析power/performace/thermal
2篇
C学习
2篇
Python学习
linux kernel-并发与同步
2篇
个人感想
目录
评论 6
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
Linux内核中__u16、__u32、__u64和size_t的理解-CSDN博客
>Linux内核中__u16、__u32、__u64和size_t的理解-CSDN博客
Linux内核中__u16、__u32、__u64和size_t的理解
程序员李哈
于 2022-08-19 12:30:23 发布
阅读量5.7k
收藏
12
点赞数
4
分类专栏:
深入理解Linux2.6内核
源码解读
文章标签:
Linux内核
Linux2.6内核
C语言
cpu架构
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43799161/article/details/126420399
版权
源码解读
同时被 2 个专栏收录
69 篇文章
9 订阅
订阅专栏
深入理解Linux2.6内核
6 篇文章
1 订阅
订阅专栏
写在前面:文章选用版本信息:Linux内核2.6.0版本、x86架构。
__u系列
为什么会出现__u系列的宏定义呢?
原因很简单,内核需要帮你适配不同cpu架构、cpu位数。
因为在32位系统中,int和long都是32位4字节的大小。而在64位系统中,int是32位4字节、long是64位8字节。在32位机中表示64位需要写成long long,这样打包运行在不同位数的机器上,就会出现未知的问题。所以内核就帮开发者适配不同机器位数的大小,如下图所示,各个平台不同位数的cpu内核都已完成适配。在开发中,直接使用内核定义的__u系列的宏定义即可。
看到__u64在32位和64机的实现细节。
// i386 32位机
typedef unsigned long long __u64;
// ia64 64位机
typedef unsigned long __u64;
size_t
再看到size_t的宏定义,也跟__u系列一样,内核也是帮开发者适配了不同平台不同架位的CPU。所以开发者只需要使用内核宏定义的size_t即可。
看到32位和64位的实现区别:
// i386 32位机
typedef unsigned int __kernel_size_t;
// ia64 64位机
typedef unsigned long __kernel_size_t;
内核中为什么存在u和__u二种宏定义系列呢?
内核中注释写的非常明白,__u系列是可以暴露出去使用的,而u系列是只能在内核中使用的。
并且u系列的底层就是__u系列。
所以为了证实__u系列是暴露出去的,笔者特意打开了hotspot虚拟机的源码证实。
总结:
最后,如果本帖对您有一定的帮助,希望能点赞+关注+收藏!您的支持是给我最大的动力,后续会一直更新各种框架的使用和框架的源码解读~!
优惠劵
程序员李哈
关注
关注
4
点赞
踩
12
收藏
觉得还不错?
一键收藏
打赏
知道了
2
评论
Linux内核中__u16、__u32、__u64和size_t的理解
写在前面:文章选用版本信息:Linux内核2.6.0版本、x86架构。__u系列为什么会出现__u系列的宏定义呢?原因很简单,内核需要帮你适配不同cpu架构、cpu位数。因为在32位系统中,int和long都是32位4字节的大小。而在64位系统中,int是32位4字节、long是64位8字节。在32位机中表示64位需要写成long long,这样打包运行在不同位数的机器上,就会出现未知的问题。所以内核就帮开发者适配不同机器位数的大小,如下图所示,各个平台不同位数的cpu内核都已完成适配。在
复制链接
扫一扫
专栏目录
2 条评论
您还未登录,请先
登录
后发表或查看评论
程序员李哈
CSDN认证博客专家
CSDN认证企业博客
码龄5年
暂无认证
91
原创
6万+
周排名
3万+
总排名
17万+
访问
等级
1378
积分
201
粉丝
359
获赞
104
评论
1032
收藏
私信
关注
热门文章
彻底理解位运算——左移、右移
53073
Spring boot+Spring security+JWT实现前后端分离登录认证及权限控制
22941
从源码理解SpringBootServletInitializer的作用
5889
Java设计模式之模板模式
5873
Linux内核中__u16、__u32、__u64和size_t的理解
5707
分类专栏
源码解读
69篇
Java底层
26篇
RocketMQ源码
1篇
Netty源码
3篇
深入理解Linux2.6内核
6篇
Spring
2篇
Spring Cloud源码
3篇
热门框架的使用
7篇
Nacos源码
1篇
juc包系列
11篇
计算机底层
6篇
C语言底层
2篇
数据结构与算法的学习
2篇
reids源码讲解
1篇
深入理解Linux0.11内核
2篇
Spring boot
5篇
插件的使用
4篇
环境搭建
5篇
Spring MVC系列
7篇
spring系列
9篇
设计模式
4篇
最新评论
Spring Cloud LoadBalancer自定义负载均衡策略
名字再好终究败给备注:
加了@LoadBalancerClients注解还需要使用@LoadBalanced注解来开启负载均衡吗?
Java设计模式之装饰器模式
endlesswater:
可以的,我看的另一个神仙级Java设计模式实战,它结合SpringBoot,我彻底学会了Java设计模式及应用,见:https://blog.csdn.net/feiying0canglang/article/details/131900171
彻底理解位运算——左移、右移
2301_81182307:
这个例子中的32默认32bit?假设是1‘b1左移1位呢,结果应该是0吧
@RefreshScope注解底层源码分析
errority:
我仔细看了一下,注册代理类和原始类的作用,应该是后面代理的时候会去容器里面getBean,这样获取的是原始类,所以需要将两个类都注册到容器中,但是primary的是代理类,也就是被其他bean注入的是代理类
@RefreshScope注解底层源码分析
errority:
还想问一下,registerBeanDefintion注册了两个,一个代理类,一个是原类把名称改成scopedTarget开头,这样做的目的是什么?原类还注册到容器中有什么作用吗?
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
JVM源码剖析之信号处理机制
JVM源码剖析之为什么ctrl+c能够结束JVM进程
JVM源码剖析之registerNatives方法
2023年34篇
2022年56篇
2021年1篇
目录
目录
分类专栏
源码解读
69篇
Java底层
26篇
RocketMQ源码
1篇
Netty源码
3篇
深入理解Linux2.6内核
6篇
Spring
2篇
Spring Cloud源码
3篇
热门框架的使用
7篇
Nacos源码
1篇
juc包系列
11篇
计算机底层
6篇
C语言底层
2篇
数据结构与算法的学习
2篇
reids源码讲解
1篇
深入理解Linux0.11内核
2篇
Spring boot
5篇
插件的使用
4篇
环境搭建
5篇
Spring MVC系列
7篇
spring系列
9篇
设计模式
4篇
目录
评论 2
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
打赏作者
程序员李哈
创作不易,希望能给与支持
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:¥1
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
u64 - Rust
- Rust☰u64Associated ConstantsBITSMAXMINMethodsabs_diffborrowing_subcarrying_addcarrying_mulchecked_addchecked_add_signedchecked_divchecked_div_euclidchecked_ilogchecked_ilog10checked_ilog2checked_mulchecked_negchecked_next_multiple_ofchecked_next_power_of_twochecked_powchecked_remchecked_rem_euclidchecked_shlchecked_shrchecked_subcount_onescount_zerosdiv_ceildiv_eucliddiv_floorfrom_befrom_be_bytesfrom_lefrom_le_bytesfrom_ne_bytesfrom_str_radixilogilog10ilog2is_power_of_twoleading_onesleading_zerosmax_valuemidpointmin_valuenext_multiple_ofnext_power_of_twooverflowing_addoverflowing_add_signedoverflowing_divoverflowing_div_euclidoverflowing_muloverflowing_negoverflowing_powoverflowing_removerflowing_rem_euclidoverflowing_shloverflowing_shroverflowing_subpowrem_euclidreverse_bitsrotate_leftrotate_rightsaturating_addsaturating_add_signedsaturating_divsaturating_mulsaturating_powsaturating_subswap_bytesto_beto_be_bytesto_leto_le_bytesto_ne_bytestrailing_onestrailing_zerosunchecked_addunchecked_mulunchecked_shlunchecked_shrunchecked_subwidening_mulwrapping_addwrapping_add_signedwrapping_divwrapping_div_euclidwrapping_mulwrapping_negwrapping_next_power_of_twowrapping_powwrapping_remwrapping_rem_euclidwrapping_shlwrapping_shrwrapping_subTrait ImplementationsAdd<&u64>Add<&u64>AddImplementations§source§impl u641.43.0 · sourcepub const MIN: u64 = 0u64æ¤æ•´æ•°ç±»å�‹å�¯ä»¥è¡¨ç¤ºçš„最å°�值。
Examples
基本用法:
assert_eq!(u64::MIN, 0);Run
1.43.0 · sourcepub const MAX: u64 = 18_446_744_073_709_551_615u64该整数类��以表示的最大值
(264 − 1).
Examples
基本用法:
assert_eq!(u64::MAX, 18446744073709551615);Run
1.53.0 · sourcepub const BITS: u32 = 64u32æ¤æ•´æ•°ç±»å�‹çš„大å°� (以ä½�为å�•ä½�)。
Examples
assert_eq!(u64::BITS, 64);Run
sourcepub fn from_str_radix(src: &str, radix: u32) -> Result
该å—符串应为å�¯é€‰çš„ + 符å�·ï¼Œå��è·Ÿæ•°å—。
å‰�导和尾éš�ç©ºæ ¼è¡¨ç¤ºé”™è¯¯ã€‚
æ ¹æ�® radix,数å—是这些å—符的å�集:
0-9
a-z
A-Z
Panics
如æ�œ radix ä¸�在 2 到 36 之间,则æ¤å‡½æ•° panics。
Examples
基本用法:
assert_eq!(u64::from_str_radix("A", 16), Ok(10));Run
const: 1.32.0 · sourcepub const fn count_ones(self) -> u32è¿”å›� self 二进制表示形å¼�ä¸çš„ä½�数。
Examples
基本用法:
let n = 0b01001100u64;
assert_eq!(n.count_ones(), 3);Run
const: 1.32.0 · sourcepub const fn count_zeros(self) -> u32è¿”å›� self 二进制表示形å¼�ä¸çš„零数。
Examples
基本用法:
assert_eq!(u64::MAX.count_zeros(), 0);Run
const: 1.32.0 · sourcepub const fn leading_zeros(self) -> u32è¿”å›� self 二进制表示形å¼�ä¸å‰�导零的数目。
æ ¹æ�®æ‚¨å¯¹å€¼çš„处ç�†æ–¹å¼�,您å�¯èƒ½è¿˜å¯¹ ilog2 函数感兴趣,它返å›�一致的数å—,å�³ä½¿ç±»å�‹å�˜å®½ã€‚
Examples
基本用法:
let n = u64::MAX >> 2;
assert_eq!(n.leading_zeros(), 2);Run
const: 1.32.0 · sourcepub const fn trailing_zeros(self) -> u32è¿”å›� self 二进制表示形å¼�ä¸çš„å°¾éš�零数。
Examples
基本用法:
let n = 0b0101000u64;
assert_eq!(n.trailing_zeros(), 3);Run
1.46.0 (const: 1.46.0) · sourcepub const fn leading_ones(self) -> u32è¿”å›� self 二进制表示形å¼�ä¸å‰�导数å—。
Examples
基本用法:
let n = !(u64::MAX >> 2);
assert_eq!(n.leading_ones(), 2);Run
1.46.0 (const: 1.46.0) · sourcepub const fn trailing_ones(self) -> u32è¿”å›� self 二进制表示形å¼�ä¸çš„å°¾éš�æ•°å—。
Examples
基本用法:
let n = 0b1010111u64;
assert_eq!(n.trailing_ones(), 3);Run
const: 1.32.0 · sourcepub const fn rotate_left(self, n: u32) -> u64å°†ä½�左移指定的é‡� n,将截æ–çš„ä½�包装到结æ�œæ•´æ•°çš„末尾。
请注æ„�,æ¤æ“�作ä¸� << 移ä½�è¿�算符ä¸�å�Œï¼�
Examples
基本用法:
let n = 0xaa00000000006e1u64;
let m = 0x6e10aa;
assert_eq!(n.rotate_left(12), m);Run
const: 1.32.0 · sourcepub const fn rotate_right(self, n: u32) -> u64å°†ä½�å�³ç§»æŒ‡å®šçš„é‡� n,将截æ–çš„ä½�包装到结æ�œæ•´æ•°çš„开头。
请注æ„�,æ¤æ“�作ä¸� >> 移ä½�è¿�算符ä¸�å�Œï¼�
Examples
基本用法:
let n = 0x6e10aau64;
let m = 0xaa00000000006e1;
assert_eq!(n.rotate_right(12), m);Run
const: 1.32.0 · sourcepub const fn swap_bytes(self) -> u64å��转整数的å—节顺åº�。
Examples
基本用法:
let n = 0x1234567890123456u64;
let m = n.swap_bytes();
assert_eq!(m, 0x5634129078563412);Run
1.37.0 (const: 1.37.0) · sourcepub const fn reverse_bits(self) -> u64å��转整数ä¸çš„ä½�顺åº�。
最ä½�有效ä½�å�˜ä¸ºæœ€é«˜æœ‰æ•ˆä½�,第二最ä½�有效ä½�å�˜ä¸ºç¬¬äºŒæœ€é«˜æœ‰æ•ˆä½�,ä¾�æ¤ç±»æ�¨ã€‚
Examples
基本用法:
let n = 0x1234567890123456u64;
let m = n.reverse_bits();
assert_eq!(m, 0x6a2c48091e6a2c48);
assert_eq!(0, 0u64.reverse_bits());Run
const: 1.32.0 · sourcepub const fn from_be(x: u64) -> u64将整数ä»�大端å—节åº�转æ�¢ä¸ºç›®æ ‡çš„å—节åº�。
在大端节��上,这是个�忌。
在å°�端å—节åº�上,å—节被交æ�¢ã€‚
Examples
基本用法:
let n = 0x1Au64;
if cfg!(target_endian = "big") {
assert_eq!(u64::from_be(n), n)
} else {
assert_eq!(u64::from_be(n), n.swap_bytes())
}Run
const: 1.32.0 · sourcepub const fn from_le(x: u64) -> u64将整数ä»�å°�端å—节åº�转æ�¢ä¸ºç›®æ ‡çš„å—节åº�。
在å°�端å—节åº�上,这是个ç¦�忌。
在大å—节åº�ä¸ï¼Œå—节被交æ�¢ã€‚
Examples
基本用法:
let n = 0x1Au64;
if cfg!(target_endian = "little") {
assert_eq!(u64::from_le(n), n)
} else {
assert_eq!(u64::from_le(n), n.swap_bytes())
}Run
const: 1.32.0 · sourcepub const fn to_be(self) -> u64å°† self ä»�ç›®æ ‡çš„å—节åº�转æ�¢ä¸ºå¤§å—节åº�。
在大端节��上,这是个�忌。
在å°�端å—节åº�上,å—节被交æ�¢ã€‚
Examples
基本用法:
let n = 0x1Au64;
if cfg!(target_endian = "big") {
assert_eq!(n.to_be(), n)
} else {
assert_eq!(n.to_be(), n.swap_bytes())
}Run
const: 1.32.0 · sourcepub const fn to_le(self) -> u64å°† self ä»�ç›®æ ‡çš„å—节åº�转æ�¢ä¸º Little Endian。
在å°�端å—节åº�上,这是个ç¦�忌。
在大å—节åº�ä¸ï¼Œå—节被交æ�¢ã€‚
Examples
基本用法:
let n = 0x1Au64;
if cfg!(target_endian = "little") {
assert_eq!(n.to_le(), n)
} else {
assert_eq!(n.to_le(), n.swap_bytes())
}Run
const: 1.47.0 · sourcepub const fn checked_add(self, rhs: u64) -> Option
计算 self + rhs,如��生溢出则返� None。
Examples
基本用法:
assert_eq!((u64::MAX - 2).checked_add(1), Some(u64::MAX - 1));
assert_eq!((u64::MAX - 2).checked_add(3), None);Run
const: unstable · sourcepub unsafe fn unchecked_add(self, rhs: u64) -> u64🔬This is a nightly-only experimental API. (unchecked_math #85122)未ç»�æ£€æŸ¥çš„æ•´æ•°åŠ æ³•ã€‚
�设�会�生溢出,则计算 self + rhs。
Safety
当以下情况时,这导致未定义的行为
self + rhs > u64::MAX or self + rhs < u64::MIN,
�当 checked_add 将返� None 时。
1.66.0 (const: 1.66.0) · sourcepub const fn checked_add_signed(self, rhs: i64) -> Option
计算 self + rhs,如��生溢出则返� None。
Examples
基本用法:
assert_eq!(1u64.checked_add_signed(2), Some(3));
assert_eq!(1u64.checked_add_signed(-2), None);
assert_eq!((u64::MAX - 2).checked_add_signed(3), None);Run
const: 1.47.0 · sourcepub const fn checked_sub(self, rhs: u64) -> Option
计算 self - rhs,如��生溢出则返� None。
Examples
基本用法:
assert_eq!(1u64.checked_sub(1), Some(0));
assert_eq!(0u64.checked_sub(1), None);Run
const: unstable · sourcepub unsafe fn unchecked_sub(self, rhs: u64) -> u64🔬This is a nightly-only experimental API. (unchecked_math #85122)未�检查的整数�法。
�设�会�生溢出,则计算 self - rhs。
Safety
当以下情况时,这导致未定义的行为
self - rhs > u64::MAX or self - rhs < u64::MIN,
�当 checked_sub 将返� None 时。
const: 1.47.0 · sourcepub const fn checked_mul(self, rhs: u64) -> Option
计算 self * rhs,如��生溢出则返� None。
Examples
基本用法:
assert_eq!(5u64.checked_mul(1), Some(5));
assert_eq!(u64::MAX.checked_mul(2), None);Run
const: unstable · sourcepub unsafe fn unchecked_mul(self, rhs: u64) -> u64🔬This is a nightly-only experimental API. (unchecked_math #85122)未�检查的整数乘法。
�设�会�生溢出,则计算 self * rhs。
Safety
当以下情况时,这导致未定义的行为
self * rhs > u64::MAX or self * rhs < u64::MIN,
�当 checked_mul 将返� None 时。
const: 1.52.0 · sourcepub const fn checked_div(self, rhs: u64) -> Option
计算 self / rhs,如�为 rhs == 0,则返� None。
Examples
基本用法:
assert_eq!(128u64.checked_div(2), Some(64));
assert_eq!(1u64.checked_div(0), None);Run
1.38.0 (const: 1.52.0) · sourcepub const fn checked_div_euclid(self, rhs: u64) -> Option
计算 self.div_euclid(rhs),如�为 rhs == 0,则返� None。
Examples
基本用法:
assert_eq!(128u64.checked_div_euclid(2), Some(64));
assert_eq!(1u64.checked_div_euclid(0), None);Run
1.7.0 (const: 1.52.0) · sourcepub const fn checked_rem(self, rhs: u64) -> Option
计算 self % rhs,如�为 rhs == 0,则返� None。
Examples
基本用法:
assert_eq!(5u64.checked_rem(2), Some(1));
assert_eq!(5u64.checked_rem(0), None);Run
1.38.0 (const: 1.52.0) · sourcepub const fn checked_rem_euclid(self, rhs: u64) -> Option
计算 self.rem_euclid(rhs),如�为 rhs == 0,则返� None。
Examples
基本用法:
assert_eq!(5u64.checked_rem_euclid(2), Some(1));
assert_eq!(5u64.checked_rem_euclid(0), None);Run
1.67.0 (const: 1.67.0) · sourcepub const fn ilog(self, base: u64) -> u32è¿”å›�æ•°å—相对äº�ä»»æ„�底数的对数,å�‘下å�–整。
ç”±äº�å®�ç�°ç»†èŠ‚,æ¤æ–¹æ³•å�¯èƒ½æœªä¼˜åŒ–ï¼›
ilog2 �以更有效地产生以 2 为底的结�,而 ilog10 �以更有效地产生以 10 为底的结�。
Panics
如� self 为零,或者如� base �� 2.
Examples
assert_eq!(5u64.ilog(5), 1);Run
1.67.0 (const: 1.67.0) · sourcepub const fn ilog2(self) -> u32è¿”å›�æ•°å—的以 2 为底的对数,å�‘下å�–整。
Panics
如� self 为零,这个函数将会 panic。
Examples
assert_eq!(2u64.ilog2(), 1);Run
1.67.0 (const: 1.67.0) · sourcepub const fn ilog10(self) -> u32è¿”å›�æ•°å—的以 10 为底的对数,å�‘下å�–整。
Panics
如� self 为零,这个函数将会 panic。
Example
assert_eq!(10u64.ilog10(), 1);Run
1.67.0 (const: 1.67.0) · sourcepub const fn checked_ilog(self, base: u64) -> Option
如æ�œæ•°å—为零,或者基数ä¸�至少为零,则返å›� None 2.
ç”±äº�å®�ç�°ç»†èŠ‚,æ¤æ–¹æ³•å�¯èƒ½æœªä¼˜åŒ–ï¼›
checked_ilog2 �以更有效地产生以 2 为底的结�,而 checked_ilog10 �以更有效地产生以 10 为底的结�。
Examples
assert_eq!(5u64.checked_ilog(5), Some(1));Run
1.67.0 (const: 1.67.0) · sourcepub const fn checked_ilog2(self) -> Option
如æ�œæ•°å—为零,则返å›� None。
Examples
assert_eq!(2u64.checked_ilog2(), Some(1));Run
1.67.0 (const: 1.67.0) · sourcepub const fn checked_ilog10(self) -> Option
如æ�œæ•°å—为零,则返å›� None。
Examples
assert_eq!(10u64.checked_ilog10(), Some(1));Run
1.7.0 (const: 1.47.0) · sourcepub const fn checked_neg(self) -> Option
计算 -self,除� self == 0,�则返� None。
请注æ„�,å�–å��任何æ£æ•´æ•°å°†æº¢å‡ºã€‚
Examples
基本用法:
assert_eq!(0u64.checked_neg(), Some(0));
assert_eq!(1u64.checked_neg(), None);Run
1.7.0 (const: 1.47.0) · sourcepub const fn checked_shl(self, rhs: u32) -> Option
计算 self << rhs,如æ�œ rhs 大äº�或ç‰äº� self ä¸çš„ä½�数,则返å›� None。
Examples
基本用法:
assert_eq!(0x1u64.checked_shl(4), Some(0x10));
assert_eq!(0x10u64.checked_shl(129), None);Run
const: unstable · sourcepub unsafe fn unchecked_shl(self, rhs: u32) -> u64🔬This is a nightly-only experimental API. (unchecked_math #85122)未检查的左移。
计算 self << rhs,å�‡è®¾ rhs å°�äº� self ä¸çš„ä½�数。
Safety
如æ�œ rhs 大äº�或ç‰äº� self ä¸çš„ä½�数,则会导致未定义的行为,å�³
当 checked_shl 返� None 时。
1.7.0 (const: 1.47.0) · sourcepub const fn checked_shr(self, rhs: u32) -> Option
计算 self >> rhs,如æ�œ rhs 大äº�或ç‰äº� self ä¸çš„ä½�数,则返å›� None。
Examples
基本用法:
assert_eq!(0x10u64.checked_shr(4), Some(0x1));
assert_eq!(0x10u64.checked_shr(129), None);Run
const: unstable · sourcepub unsafe fn unchecked_shr(self, rhs: u32) -> u64🔬This is a nightly-only experimental API. (unchecked_math #85122)未检查�移。
计算 self >> rhs,å�‡è®¾ rhs å°�äº� self ä¸çš„ä½�数。
Safety
如æ�œ rhs 大äº�或ç‰äº� self ä¸çš„ä½�数,则会导致未定义的行为,å�³
当 checked_shr 返� None 时。
1.34.0 (const: 1.50.0) · sourcepub const fn checked_pow(self, exp: u32) -> Option
计算 self.pow(exp),如��生溢出则返� None。
Examples
基本用法:
assert_eq!(2u64.checked_pow(5), Some(32));
assert_eq!(u64::MAX.checked_pow(2), None);Run
const: 1.47.0 · sourcepub const fn saturating_add(self, rhs: u64) -> u64é¥±å’Œæ•´æ•°åŠ æ³•ã€‚
计算 self + rhs,在数å—范围内饱和,而ä¸�是溢出。
Examples
基本用法:
assert_eq!(100u64.saturating_add(1), 101);
assert_eq!(u64::MAX.saturating_add(127), u64::MAX);Run
1.66.0 (const: 1.66.0) · sourcepub const fn saturating_add_signed(self, rhs: i64) -> u64带符å�·æ•´æ•°çš„é¥±å’ŒåŠ æ³•ã€‚
计算 self + rhs,在数å—范围内饱和,而ä¸�是溢出。
Examples
基本用法:
assert_eq!(1u64.saturating_add_signed(2), 3);
assert_eq!(1u64.saturating_add_signed(-2), 0);
assert_eq!((u64::MAX - 2).saturating_add_signed(4), u64::MAX);Run
const: 1.47.0 · sourcepub const fn saturating_sub(self, rhs: u64) -> u64饱和整数�法。
计算 self - rhs,在数å—范围内饱和,而ä¸�是溢出。
Examples
基本用法:
assert_eq!(100u64.saturating_sub(27), 73);
assert_eq!(13u64.saturating_sub(127), 0);Run
1.7.0 (const: 1.47.0) · sourcepub const fn saturating_mul(self, rhs: u64) -> u64饱和整数乘法。
计算 self * rhs,在数å—范围内饱和,而ä¸�是溢出。
Examples
基本用法:
assert_eq!(2u64.saturating_mul(10), 20);
assert_eq!((u64::MAX).saturating_mul(10), u64::MAX);Run
1.58.0 (const: 1.58.0) · sourcepub const fn saturating_div(self, rhs: u64) -> u64饱和整数除法。
计算 self / rhs,在数值边界处饱和而�是溢出。
Examples
基本用法:
assert_eq!(5u64.saturating_div(2), 2);
Run
ⓘlet _ = 1u64.saturating_div(0);
Run
1.34.0 (const: 1.50.0) · sourcepub const fn saturating_pow(self, exp: u32) -> u64饱和整数幂。
计算 self.pow(exp),在数å—范围内饱和,而ä¸�是溢出。
Examples
基本用法:
assert_eq!(4u64.saturating_pow(3), 64);
assert_eq!(u64::MAX.saturating_pow(2), u64::MAX);Run
const: 1.32.0 · sourcepub const fn wrapping_add(self, rhs: u64) -> u64包装 (modular) æ·»åŠ ã€‚
计算 self + rhs,在类�的边界处�绕。
Examples
基本用法:
assert_eq!(200u64.wrapping_add(55), 255);
assert_eq!(200u64.wrapping_add(u64::MAX), 199);Run
1.66.0 (const: 1.66.0) · sourcepub const fn wrapping_add_signed(self, rhs: i64) -> u64用有符å�·æ•´æ•°åŒ…装 (modular) åŠ æ³•ã€‚
计算 self + rhs,在类�的边界处�绕。
Examples
基本用法:
assert_eq!(1u64.wrapping_add_signed(2), 3);
assert_eq!(1u64.wrapping_add_signed(-2), u64::MAX);
assert_eq!((u64::MAX - 2).wrapping_add_signed(4), 1);Run
const: 1.32.0 · sourcepub const fn wrapping_sub(self, rhs: u64) -> u64包装 (modular) �法。
计算 self - rhs,在类�的边界处�绕。
Examples
基本用法:
assert_eq!(100u64.wrapping_sub(100), 0);
assert_eq!(100u64.wrapping_sub(u64::MAX), 101);Run
const: 1.32.0 · sourcepub const fn wrapping_mul(self, rhs: u64) -> u64包装 (modular) 乘法。
计算 self * rhs,在类�的边界处�绕。
Examples
基本用法:
请注æ„�,æ¤ç¤ºä¾‹åœ¨æ•´æ•°ç±»å�‹ä¹‹é—´å…±äº«ã€‚
这就解释了为什么在这里使用 u8。
assert_eq!(10u8.wrapping_mul(12), 120);
assert_eq!(25u8.wrapping_mul(12), 44);Run
1.2.0 (const: 1.52.0) · sourcepub const fn wrapping_div(self, rhs: u64) -> u64包装 (modular) 分区。计算 self / rhs。
æ— ç¬¦å�·ç±»å�‹çš„包装除法å�ªæ˜¯æ™®é€šé™¤æ³•ã€‚
包装是��能�生的。
该函数å˜åœ¨ï¼Œå› æ¤æ‰€æœ‰æ“�作都在包装æ“�作ä¸è€ƒè™‘。
Examples
基本用法:
assert_eq!(100u64.wrapping_div(10), 10);Run
1.38.0 (const: 1.52.0) · sourcepub const fn wrapping_div_euclid(self, rhs: u64) -> u64åŒ…è£…æ¬§å‡ é‡Œå¾—é™¤æ³•ã€‚è®¡ç®— self.div_euclid(rhs)。
æ— ç¬¦å�·ç±»å�‹çš„包装除法å�ªæ˜¯æ™®é€šé™¤æ³•ã€‚
包装是��能�生的。
该函数å˜åœ¨ï¼Œå› æ¤æ‰€æœ‰æ“�作都在包装æ“�作ä¸è€ƒè™‘。
å› ä¸ºå¯¹äº�æ£æ•´æ•°ï¼Œæ‰€æœ‰é™¤æ³•çš„通用定义都是相ç‰çš„,所以它æ�°å¥½ç‰äº� self.wrapping_div(rhs)。
Examples
基本用法:
assert_eq!(100u64.wrapping_div_euclid(10), 10);Run
1.2.0 (const: 1.52.0) · sourcepub const fn wrapping_rem(self, rhs: u64) -> u64包装 (modular) 余数。计算 self % rhs。
æ— ç¬¦å�·ç±»å�‹çš„包装余数计算å�ªæ˜¯å¸¸è§„余数计算。
包装是��能�生的。
该函数å˜åœ¨ï¼Œå› æ¤æ‰€æœ‰æ“�作都在包装æ“�作ä¸è€ƒè™‘。
Examples
基本用法:
assert_eq!(100u64.wrapping_rem(10), 0);Run
1.38.0 (const: 1.52.0) · sourcepub const fn wrapping_rem_euclid(self, rhs: u64) -> u64åŒ…è£…æ¬§å‡ é‡Œå¾·æ¨¡ã€‚è®¡ç®— self.rem_euclid(rhs)。
æ— ç¬¦å�·ç±»å�‹çš„包装模è¿�ç®—å�ªæ˜¯å¸¸è§„的余数计算。
包装是��能�生的。
该函数å˜åœ¨ï¼Œå› æ¤æ‰€æœ‰æ“�作都在包装æ“�作ä¸è€ƒè™‘。
å› ä¸ºå¯¹äº�æ£æ•´æ•°ï¼Œæ‰€æœ‰é™¤æ³•çš„通用定义都是相ç‰çš„,所以它æ�°å¥½ç‰äº� self.wrapping_rem(rhs)。
Examples
基本用法:
assert_eq!(100u64.wrapping_rem_euclid(10), 0);Run
1.2.0 (const: 1.32.0) · sourcepub const fn wrapping_neg(self) -> u64包装 (modular) ��。
计算 -self,在类�的边界处�绕。
ç”±äº�æ— ç¬¦å�·ç±»å�‹æ²¡æœ‰è´Ÿçš„ç‰æ•ˆé¡¹ï¼Œå› æ¤è¯¥å‡½æ•°çš„所有应用程åº�都将自动æ�¢è¡Œ (-0 除外)。
对���相应有符�类�的最大值的值,结��强制转�相应有符�值的结�相�。
任何较大的值都ç‰äº� MAX + 1 - (val - MAX - 1)ï¼Œå…¶ä¸ MAX 是对应的有符å�·ç±»å�‹çš„最大值。
Examples
基本用法:
assert_eq!(0_u64.wrapping_neg(), 0);
assert_eq!(u64::MAX.wrapping_neg(), 1);
assert_eq!(13_u64.wrapping_neg(), (!13) + 1);
assert_eq!(42_u64.wrapping_neg(), !(42 - 1));Run
1.2.0 (const: 1.32.0) · sourcepub const fn wrapping_shl(self, rhs: u32) -> u64æ— Panic - 按ä½�左移;
产生 self << mask(rhs)ï¼Œå…¶ä¸ mask åˆ é™¤ rhs 的所有高ä½�,这些高ä½�将导致移ä½�超过该类å�‹çš„ä½�宽。
注�,这�左旋��; �绕左移的 RHS ��该类�的范围,而�是� LHS 移出的�返�到�一端。
所有�始整数类�都��了 rotate_left 函数,而您�能想�的是 rotate_left 函数。
Examples
基本用法:
assert_eq!(1u64.wrapping_shl(7), 128);
assert_eq!(1u64.wrapping_shl(128), 1);Run
1.2.0 (const: 1.32.0) · sourcepub const fn wrapping_shr(self, rhs: u32) -> u64æ— Panic - 按ä½�å�³ç§»ï¼›
产生 self >> mask(rhs)ï¼Œå…¶ä¸ mask åˆ é™¤ rhs 的所有高ä½�,这些高ä½�将导致移ä½�超过该类å�‹çš„ä½�宽。
注�,这��旋转��。�行�移的 RHS ��类�的范围,而�是� LHS 移出的�返�到�一端。
所有�始整数类�都��了 rotate_right 函数,而您�能想�的是 rotate_right 函数。
Examples
基本用法:
assert_eq!(128u64.wrapping_shr(7), 1);
assert_eq!(128u64.wrapping_shr(128), 128);Run
1.34.0 (const: 1.50.0) · sourcepub const fn wrapping_pow(self, exp: u32) -> u64包装 (modular) 指数。
计算 self.pow(exp),在类�的边界处�绕。
Examples
基本用法:
assert_eq!(3u64.wrapping_pow(5), 243);
assert_eq!(3u8.wrapping_pow(6), 217);Run
1.7.0 (const: 1.32.0) · sourcepub const fn overflowing_add(self, rhs: u64) -> (u64, bool)计算 self + rhs
è¿”å›�ä¸€ä¸ªåŠ æ³•å…ƒç»„ä»¥å�Šä¸€ä¸ªå¸ƒå°”值,该布尔值指示是å�¦ä¼šå�‘生算术溢出。
如�将�生溢出,则返�包装的值。
Examples
基本用法
assert_eq!(5u64.overflowing_add(2), (7, false));
assert_eq!(u64::MAX.overflowing_add(1), (0, true));Run
const: unstable · sourcepub fn carrying_add(self, rhs: u64, carry: bool) -> (u64, bool)🔬This is a nightly-only experimental API. (bigint_helper_methods #85532)计算 self + rhs + carry 并返�一个包�总和和输出进�的元组。
对两个整数�作数和一个进��执行 “ternary addition�,并返�一个输出整数和一个进��。
è¿™å…�è®¸å°†å¤šä¸ªåŠ æ³•é“¾æ�¥åœ¨ä¸€èµ·ä»¥åˆ›å»ºæ›´å¹¿æ³›çš„åŠ æ³•ï¼Œå¹¶ä¸”å¯¹äº� bignum åŠ æ³•å¾ˆæœ‰ç”¨ã€‚
This can be thought of as a 64-bit “full adder�, in the electronics sense.
如æ�œè¾“入进ä½�为å�‡ï¼Œåˆ™æ¤æ–¹æ³•ç‰ä»·äº� overflowing_add,输出进ä½�ç‰äº�æº¢å‡ºæ ‡å¿—ã€‚
请注æ„�,尽管进ä½�å’Œæº¢å‡ºæ ‡å¿—å¯¹äº�æ— ç¬¦å�·æ•´æ•°æ˜¯ç›¸ä¼¼çš„,但对äº�有符å�·æ•´æ•°å®ƒä»¬æ˜¯ä¸�å�Œçš„。
Examples
#![feature(bigint_helper_methods)]
// 3 MAX (a = 3 × 2^64 + 2^64 - 1)
// + 5 7 (b = 5 × 2^64 + 7)
// ---------
// 9 6 (sum = 9 × 2^64 + 6)
let (a1, a0): (u64, u64) = (3, u64::MAX);
let (b1, b0): (u64, u64) = (5, 7);
let carry0 = false;
let (sum0, carry1) = a0.carrying_add(b0, carry0);
assert_eq!(carry1, true);
let (sum1, carry2) = a1.carrying_add(b1, carry1);
assert_eq!(carry2, false);
assert_eq!((sum1, sum0), (9, 6));Run
1.66.0 (const: 1.66.0) · sourcepub const fn overflowing_add_signed(self, rhs: i64) -> (u64, bool)使用带符�的 rhs 计算 self + rhs
è¿”å›�ä¸€ä¸ªåŠ æ³•å…ƒç»„ä»¥å�Šä¸€ä¸ªå¸ƒå°”值,该布尔值指示是å�¦ä¼šå�‘生算术溢出。
如�将�生溢出,则返�包装的值。
Examples
基本用法:
assert_eq!(1u64.overflowing_add_signed(2), (3, false));
assert_eq!(1u64.overflowing_add_signed(-2), (u64::MAX, true));
assert_eq!((u64::MAX - 2).overflowing_add_signed(4), (1, true));Run
1.7.0 (const: 1.32.0) · sourcepub const fn overflowing_sub(self, rhs: u64) -> (u64, bool)计算 self-rhs
返�一个�法的元组以�一个布尔值,该布尔值指示是�会�生算术溢出。
如�将�生溢出,则返�包装的值。
Examples
基本用法
assert_eq!(5u64.overflowing_sub(2), (3, false));
assert_eq!(0u64.overflowing_sub(1), (u64::MAX, true));Run
const: unstable · sourcepub fn borrowing_sub(self, rhs: u64, borrow: bool) -> (u64, bool)🔬This is a nightly-only experimental API. (bigint_helper_methods #85532)计算 self-rhs-borrow 并返�一个包�差值和输出借用的元组。
通过ä»� self ä¸å‡�å�»ä¸€ä¸ªæ•´æ•°æ“�作数和一个借用 - in ä½�æ�¥æ‰§è¡Œ “ternary subtractionâ€�,并返å›�一个输出整数和一个借用 - out ä½�。
这�许将多个�法链�在一起以创建更广泛的�法,并且对� bignum �法很有用。
Examples
#![feature(bigint_helper_methods)]
// 9 6 (a = 9 × 2^64 + 6)
// - 5 7 (b = 5 × 2^64 + 7)
// ---------
// 3 MAX (diff = 3 × 2^64 + 2^64 - 1)
let (a1, a0): (u64, u64) = (9, 6);
let (b1, b0): (u64, u64) = (5, 7);
let borrow0 = false;
let (diff0, borrow1) = a0.borrowing_sub(b0, borrow0);
assert_eq!(borrow1, true);
let (diff1, borrow2) = a1.borrowing_sub(b1, borrow1);
assert_eq!(borrow2, false);
assert_eq!((diff1, diff0), (3, u64::MAX));Run
1.60.0 (const: 1.60.0) · sourcepub const fn abs_diff(self, other: u64) -> u64计算 self 和 other 之间的�对差。
Examples
基本用法:
assert_eq!(100u64.abs_diff(80), 20u64);
assert_eq!(100u64.abs_diff(110), 10u64);Run
1.7.0 (const: 1.32.0) · sourcepub const fn overflowing_mul(self, rhs: u64) -> (u64, bool)计算 self 和 rhs 的乘法。
返�乘法的元组以�一个布尔值,该布尔值指示是�会�生算术溢出。
如�将�生溢出,则返�包装的值。
Examples
基本用法:
请注æ„�,æ¤ç¤ºä¾‹åœ¨æ•´æ•°ç±»å�‹ä¹‹é—´å…±äº«ã€‚
这就解释了为什么在这里使用 u32。
assert_eq!(5u32.overflowing_mul(2), (10, false));
assert_eq!(1_000_000_000u32.overflowing_mul(10), (1410065408, true));Run
1.7.0 (const: 1.52.0) · sourcepub const fn overflowing_div(self, rhs: u64) -> (u64, bool)self 除以 rhs 时计算除数。
返�除数的元组以�指示是�将�生算术溢出的布尔值。
请注æ„�,对äº�æ— ç¬¦å�·æ•´æ•°ï¼Œæ°¸è¿œä¸�会å�‘ç”Ÿæº¢å‡ºï¼Œå› æ¤ç¬¬äºŒä¸ªå€¼å§‹ç»ˆä¸º false。
Panics
如� rhs 是,这个函数会 panic 0.
Examples
基本用法
assert_eq!(5u64.overflowing_div(2), (2, false));Run
1.38.0 (const: 1.52.0) · sourcepub const fn overflowing_div_euclid(self, rhs: u64) -> (u64, bool)è®¡ç®—æ¬§å‡ é‡Œå¾—é™¤æ³• self.div_euclid(rhs) 的商。
返�除数的元组以�指示是�将�生算术溢出的布尔值。
请注æ„�,对äº�æ— ç¬¦å�·æ•´æ•°ï¼Œæ°¸è¿œä¸�会å�‘ç”Ÿæº¢å‡ºï¼Œå› æ¤ç¬¬äºŒä¸ªå€¼å§‹ç»ˆä¸º false。
å› ä¸ºå¯¹äº�æ£æ•´æ•°ï¼Œæ‰€æœ‰é™¤æ³•çš„通用定义都是相ç‰çš„,所以它æ�°å¥½ç‰äº� self.overflowing_div(rhs)。
Panics
如� rhs 是,这个函数会 panic 0.
Examples
基本用法
assert_eq!(5u64.overflowing_div_euclid(2), (2, false));Run
1.7.0 (const: 1.52.0) · sourcepub const fn overflowing_rem(self, rhs: u64) -> (u64, bool)self 除以 rhs 时计算余数。
返�除法�算�的余数元组和一个布尔值,该布尔值指示是�会�生算术溢出。
请注æ„�,对äº�æ— ç¬¦å�·æ•´æ•°ï¼Œæ°¸è¿œä¸�会å�‘ç”Ÿæº¢å‡ºï¼Œå› æ¤ç¬¬äºŒä¸ªå€¼å§‹ç»ˆä¸º false。
Panics
如� rhs 是,这个函数会 panic 0.
Examples
基本用法
assert_eq!(5u64.overflowing_rem(2), (1, false));Run
1.38.0 (const: 1.52.0) · sourcepub const fn overflowing_rem_euclid(self, rhs: u64) -> (u64, bool)ä»¥æ¬§å‡ é‡Œå¾—é™¤æ³•è®¡ç®—ä½™æ•° self.rem_euclid(rhs)。
返�除以布尔�的模元,并返�一个布尔值,指示是�会�生算术溢出。
请注æ„�,对äº�æ— ç¬¦å�·æ•´æ•°ï¼Œæ°¸è¿œä¸�会å�‘ç”Ÿæº¢å‡ºï¼Œå› æ¤ç¬¬äºŒä¸ªå€¼å§‹ç»ˆä¸º false。
ç”±äº�对äº�æ£æ•´æ•°ï¼Œæ‰€æœ‰é™¤æ³•çš„通用定义å�‡ç›¸ç‰ï¼Œå› æ¤è¯¥è¿�ç®—æ�°å¥½ç‰äº� self.overflowing_rem(rhs)。
Panics
如� rhs 是,这个函数会 panic 0.
Examples
基本用法
assert_eq!(5u64.overflowing_rem_euclid(2), (1, false));Run
1.7.0 (const: 1.32.0) · sourcepub const fn overflowing_neg(self) -> (u64, bool)以一�泛滥的方��定自我。
使用包装æ“�作返å›� !self + 1,以返å›�è¡¨ç¤ºè¯¥æ— ç¬¦å�·å€¼çš„å�–å��的值。
请注æ„�,对äº�æ£çš„æ— ç¬¦å�·å€¼ï¼Œæ€»æ˜¯ä¼šå�‘生溢出,但å�–å�� 0 ä¸�会溢出。
Examples
基本用法
assert_eq!(0u64.overflowing_neg(), (0, false));
assert_eq!(2u64.overflowing_neg(), (-2i32 as u64, true));Run
1.7.0 (const: 1.32.0) · sourcepub const fn overflowing_shl(self, rhs: u32) -> (u64, bool)将 self 左移 rhs �。
è¿”å›� self 的移ä½�版本的元组以å�Šä¸€ä¸ªå¸ƒå°”值,该布尔值指示 shift 值是å�¦å¤§äº�或ç‰äº�ä½�数。
如æ�œç§»ä½�值太大,则将值å±�蔽 (N-1)ï¼Œå…¶ä¸ N 是ä½�数,然å��使用该值执行移ä½�。
Examples
基本用法
assert_eq!(0x1u64.overflowing_shl(4), (0x10, false));
assert_eq!(0x1u64.overflowing_shl(132), (0x10, true));Run
1.7.0 (const: 1.32.0) · sourcepub const fn overflowing_shr(self, rhs: u32) -> (u64, bool)将 self �移 rhs �。
è¿”å›� self 的移ä½�版本的元组以å�Šä¸€ä¸ªå¸ƒå°”值,该布尔值指示 shift 值是å�¦å¤§äº�或ç‰äº�ä½�数。
如æ�œç§»ä½�值太大,则将值å±�蔽 (N-1)ï¼Œå…¶ä¸ N 是ä½�数,然å��使用该值执行移ä½�。
Examples
基本用法
assert_eq!(0x10u64.overflowing_shr(4), (0x1, false));
assert_eq!(0x10u64.overflowing_shr(132), (0x1, true));Run
1.34.0 (const: 1.50.0) · sourcepub const fn overflowing_pow(self, exp: u32) -> (u64, bool)通过平方�算,将自己��到 exp 的功效。
返�一个指数的元组以�一个 bool,指示是��生了溢出。
Examples
基本用法:
assert_eq!(3u64.overflowing_pow(5), (243, false));
assert_eq!(3u8.overflowing_pow(6), (217, true));Run
const: 1.50.0 · sourcepub const fn pow(self, exp: u32) -> u64通过平方�算,将自己��到 exp 的功效。
Examples
基本用法:
assert_eq!(2u64.pow(5), 32);Run
1.38.0 (const: 1.52.0) · sourcepub const fn div_euclid(self, rhs: u64) -> u64æ‰§è¡Œæ¬§å‡ é‡Œå¾—é™¤æ³•ã€‚
å› ä¸ºå¯¹äº�æ£æ•´æ•°ï¼Œæ‰€æœ‰é™¤æ³•çš„通用定义都是相ç‰çš„,所以它æ�°å¥½ç‰äº� self / rhs。
Panics
如� rhs 是,这个函数会 panic 0.
Examples
基本用法:
assert_eq!(7u64.div_euclid(4), 1); // or any other integer typeRun
1.38.0 (const: 1.52.0) · sourcepub const fn rem_euclid(self, rhs: u64) -> u64计算 self (mod rhs) 的最�余数。
å› ä¸ºå¯¹äº�æ£æ•´æ•°ï¼Œæ‰€æœ‰é™¤æ³•çš„通用定义都是相ç‰çš„,所以它æ�°å¥½ç‰äº� self % rhs。
Panics
如� rhs 是,这个函数会 panic 0.
Examples
基本用法:
assert_eq!(7u64.rem_euclid(4), 3); // or any other integer typeRun
sourcepub const fn div_floor(self, rhs: u64) -> u64🔬This is a nightly-only experimental API. (int_roundings #88581)计算 self å’Œ rhs 的商,将结æ�œå››èˆ�äº”å…¥åˆ°è´Ÿæ— ç©·å¤§ã€‚
è¿™ä¸�å¯¹æ‰€æœ‰æ— ç¬¦å�·æ•´æ•°æ‰§è¡Œ self / rhs 相å�Œã€‚
Panics
如� rhs 为零,这个函数将会 panic。
Examples
基本用法:
#![feature(int_roundings)]
assert_eq!(7_u64.div_floor(4), 1);Run
sourcepub const fn div_ceil(self, rhs: u64) -> u64🔬This is a nightly-only experimental API. (int_roundings #88581)计算 self å’Œ rhs 的商,将结æ�œå››èˆ�五入到æ£æ— 穷大。
Panics
如� rhs 为零,这个函数将会 panic。
溢出行为
溢出时,如æ�œå�¯ç”¨æº¢å‡ºæ£€æŸ¥ (默认在调试模å¼�下),æ¤å‡½æ•°å°† panic,如æ�œç¦�用溢出检查 (默认在,生产模å¼�,下),则返å›�。
Examples
基本用法:
#![feature(int_roundings)]
assert_eq!(7_u64.div_ceil(4), 2);Run
sourcepub const fn next_multiple_of(self, rhs: u64) -> u64🔬This is a nightly-only experimental API. (int_roundings #88581)计算大äº�或ç‰äº� rhs å€�æ•°çš„ self 的最å°�值。
Panics
如� rhs 为零,这个函数将会 panic。
溢出行为
溢出时,如æ�œå�¯ç”¨æº¢å‡ºæ£€æŸ¥ (默认在调试模å¼�下),æ¤å‡½æ•°å°† panic,如æ�œç¦�用溢出检查 (默认在,生产模å¼�,下),则返å›�。
Examples
基本用法:
#![feature(int_roundings)]
assert_eq!(16_u64.next_multiple_of(8), 16);
assert_eq!(23_u64.next_multiple_of(8), 24);Run
sourcepub const fn checked_next_multiple_of(self, rhs: u64) -> Option
如� rhs 为零,则返� None,�则�作会导致溢出。
Examples
基本用法:
#![feature(int_roundings)]
assert_eq!(16_u64.checked_next_multiple_of(8), Some(16));
assert_eq!(23_u64.checked_next_multiple_of(8), Some(24));
assert_eq!(1_u64.checked_next_multiple_of(0), None);
assert_eq!(u64::MAX.checked_next_multiple_of(2), None);Run
const: 1.32.0 · sourcepub const fn is_power_of_two(self) -> bool当且仅当�些 k 的 self == 2^k 时,�返� true。
Examples
基本用法:
assert!(16u64.is_power_of_two());
assert!(!10u64.is_power_of_two());Run
const: 1.50.0 · sourcepub const fn next_power_of_two(self) -> u64è¿”å›�大äº�或ç‰äº� self çš„ 2 的最å°�幂。
当返�值溢出 (� uN 类�为 self > (1 << (N-1))) 时,它在调试模�下为 panics,在生产模�下返�值被包装为 0 (方法�以返� 0 的唯一情况)。
Examples
基本用法:
assert_eq!(2u64.next_power_of_two(), 2);
assert_eq!(3u64.next_power_of_two(), 4);Run
const: 1.50.0 · sourcepub const fn checked_next_power_of_two(self) -> Option
如æ�œä¸‹ä¸€ä¸ª 2 的幂大äº�该类å�‹çš„最大值,则返å›� None,å�¦åˆ™å°† 2 的幂包装在 Some ä¸ã€‚
Examples
基本用法:
assert_eq!(2u64.checked_next_power_of_two(), Some(2));
assert_eq!(3u64.checked_next_power_of_two(), Some(4));
assert_eq!(u64::MAX.checked_next_power_of_two(), None);Run
const: unstable · sourcepub fn wrapping_next_power_of_two(self) -> u64🔬This is a nightly-only experimental API. (wrapping_next_power_of_two #32463)è¿”å›�大äº�或ç‰äº� n çš„ 2 的最å°�幂。
如�下一个 2 的幂大�该类�的最大值,则返�值将包装为 0。
Examples
基本用法:
#![feature(wrapping_next_power_of_two)]
assert_eq!(2u64.wrapping_next_power_of_two(), 2);
assert_eq!(3u64.wrapping_next_power_of_two(), 4);
assert_eq!(u64::MAX.wrapping_next_power_of_two(), 0);Run
1.32.0 (const: 1.44.0) · sourcepub const fn to_be_bytes(self) -> [u8; 8]以大端 (网络) å—节顺åº�将这个整数的内å˜è¡¨ç¤ºå½¢å¼�作为å—节数组返å›�。
Examples
let bytes = 0x1234567890123456u64.to_be_bytes();
assert_eq!(bytes, [0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x34, 0x56]);Run
1.32.0 (const: 1.44.0) · sourcepub const fn to_le_bytes(self) -> [u8; 8]以å°�端å—节顺åº�将这个整数的内å˜è¡¨ç¤ºå½¢å¼�è¿”å›�为å—节数组。
Examples
let bytes = 0x1234567890123456u64.to_le_bytes();
assert_eq!(bytes, [0x56, 0x34, 0x12, 0x90, 0x78, 0x56, 0x34, 0x12]);Run
1.32.0 (const: 1.44.0) · sourcepub const fn to_ne_bytes(self) -> [u8; 8]å°†æ¤æ•´æ•°çš„内å˜è¡¨ç¤ºä½œä¸ºæœ¬æœºå—节顺åº�çš„å—节数组返å›�。
ç”±äº�ä½¿ç”¨äº†ç›®æ ‡å¹³å�°çš„å�Ÿç”Ÿå—节åº�ï¼Œå› æ¤ï¼Œå�¯ç§»æ¤�代ç �应酌情使用 to_be_bytes 或 to_le_bytes。
Examples
let bytes = 0x1234567890123456u64.to_ne_bytes();
assert_eq!(
bytes,
if cfg!(target_endian = "big") {
[0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x34, 0x56]
} else {
[0x56, 0x34, 0x12, 0x90, 0x78, 0x56, 0x34, 0x12]
}
);Run
1.32.0 (const: 1.44.0) · sourcepub const fn from_be_bytes(bytes: [u8; 8]) -> u64æ ¹æ�®å…¶è¡¨ç¤ºå½¢å¼� (大å—节åº�ä¸çš„å—节数组) 创建一个本地å—节åº�整数值。
Examples
let value = u64::from_be_bytes([0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x34, 0x56]);
assert_eq!(value, 0x1234567890123456);Run
�切片而�是数组开始时,�以使用容易出错的转� API:
fn read_be_u64(input: &mut &[u8]) -> u64 {
let (int_bytes, rest) = input.split_at(std::mem::size_of::
*input = rest;
u64::from_be_bytes(int_bytes.try_into().unwrap())
}Run
1.32.0 (const: 1.44.0) · sourcepub const fn from_le_bytes(bytes: [u8; 8]) -> u64ä»�它的表示形å¼�以 little endian çš„å—节数组创建一个本地 endian 整数值。
Examples
let value = u64::from_le_bytes([0x56, 0x34, 0x12, 0x90, 0x78, 0x56, 0x34, 0x12]);
assert_eq!(value, 0x1234567890123456);Run
�切片而�是数组开始时,�以使用容易出错的转� API:
fn read_le_u64(input: &mut &[u8]) -> u64 {
let (int_bytes, rest) = input.split_at(std::mem::size_of::
*input = rest;
u64::from_le_bytes(int_bytes.try_into().unwrap())
}Run
1.32.0 (const: 1.44.0) · sourcepub const fn from_ne_bytes(bytes: [u8; 8]) -> u64ä»�其内å˜è¡¨ç¤ºå½¢å¼�以å�Ÿç”Ÿå—节åº�å½¢å¼�创建一个å�Ÿç”Ÿå—节åº�整数值。
ç”±äº�ä½¿ç”¨äº†ç›®æ ‡å¹³å�°çš„å�Ÿç”Ÿå—节åº�ï¼Œå› æ¤å�¯ç§»æ¤�代ç �å�¯èƒ½å¸Œæœ›é…Œæƒ…使用 from_be_bytes 或 from_le_bytes。
Examples
let value = u64::from_ne_bytes(if cfg!(target_endian = "big") {
[0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x34, 0x56]
} else {
[0x56, 0x34, 0x12, 0x90, 0x78, 0x56, 0x34, 0x12]
});
assert_eq!(value, 0x1234567890123456);Run
�切片而�是数组开始时,�以使用容易出错的转� API:
fn read_ne_u64(input: &mut &[u8]) -> u64 {
let (int_bytes, rest) = input.split_at(std::mem::size_of::
*input = rest;
u64::from_ne_bytes(int_bytes.try_into().unwrap())
}Run
const: 1.32.0 · sourcepub const fn min_value() -> u64ğŸ‘�Deprecating in a future Rust version: replaced by the MIN associated constant on this type新代ç �应优先使用
u64::MIN instead.
è¿”å›�æ¤æ•´æ•°ç±»å�‹å�¯ä»¥è¡¨ç¤ºçš„最å°�值。
const: 1.32.0 · sourcepub const fn max_value() -> u64ğŸ‘�Deprecating in a future Rust version: replaced by the MAX associated constant on this type新代ç �应优先使用
u64::MAX instead.
è¿”å›�æ¤æ•´æ•°ç±»å�‹å�¯ä»¥è¡¨ç¤ºçš„最大值。
const: unstable · sourcepub fn widening_mul(self, rhs: u64) -> (u64, u64)🔬This is a nightly-only experimental API. (bigint_helper_methods #85532)计算完整的产� self * rhs,没有溢出的�能性。
这将返�结�的�� (wrapping) �和高� (overflow) �作为两个�独的值,按该顺�。
如æ�œæ‚¨è¿˜éœ€è¦�在宽结æ�œä¸æ·»åŠ è¿›ä½�,那么您需è¦� Self::carrying_mul。
Examples
基本用法:
请注æ„�,æ¤ç¤ºä¾‹åœ¨æ•´æ•°ç±»å�‹ä¹‹é—´å…±äº«ã€‚
这就解释了为什么在这里使用 u32。
#![feature(bigint_helper_methods)]
assert_eq!(5u32.widening_mul(2), (10, 0));
assert_eq!(1_000_000_000u32.widening_mul(10), (1410065408, 2));Run
const: unstable · sourcepub fn carrying_mul(self, rhs: u64, carry: u64) -> (u64, u64)🔬This is a nightly-only experimental API. (bigint_helper_methods #85532)计算 “full multiplication� self * rhs + carry 而��能溢出。
这将返�结�的�� (wrapping) �和高� (overflow) �作为两个�独的值,按该顺�。
执行 “long multiplicationâ€�,它需è¦�æ·»åŠ é¢�外的é‡�,并且å�¯èƒ½è¿”å›�é¢�外的溢出é‡�。
这�许将多个乘法链�在一起以创建代表更大值的 “大整数�。
如�您�需� carry,那么您�以使用 Self::widening_mul。
Examples
基本用法:
请注æ„�,æ¤ç¤ºä¾‹åœ¨æ•´æ•°ç±»å�‹ä¹‹é—´å…±äº«ã€‚
这就解释了为什么在这里使用 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));Run
This is the core operation needed for scalar multiplication when
implementing it for wider-than-native types.
#![feature(bigint_helper_methods)]
fn scalar_mul_eq(little_endian_digits: &mut Vec
let mut carry = 0;
对äº� little_endian_digits.iter_mut() { (*d, carry) = d.carrying_mul(multiplicand, carry); } ä¸çš„ d 如æ�œè¿›ä½� != 0 {
little_endian_digits.push(carry);
}
}
let mut v = vec![10, 20];
scalar_mul_eq(&mut v, 3);
assert_eq!(v, [30, 60]);
assert_eq!(0x87654321_u64 * 0xFEED, 0x86D3D159E38D);
let mut v = vec![0x4321, 0x8765];
scalar_mul_eq(&mut v, 0xFEED);
assert_eq!(v, [0xE38D, 0xD159, 0x86D3]);
Run
If carry is zero, this is similar to overflowing_mul,
except that it gives the value of the overflow instead of just whether one happened:
#![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));
Run
The value of the first field in the returned tuple matches what you’d get
by combining the wrapping_mul and
wrapping_add methods:
#![feature(bigint_helper_methods)]
assert_eq!(
789_u16.carrying_mul(456, 123).0, 789_u16.wrapping_mul(456).wrapping_add(123), );Run
const: unstable · sourcepub fn midpoint(self, rhs: u64) -> u64🔬This is a nightly-only experimental API. (num_midpoint #110840)计算 self å’Œ rhs çš„ä¸ç‚¹ã€‚
midpoint(a, b) 是 (a + b) >> 1,就好åƒ�它是在足够大的带符å�·æ•´æ•°ç±»å�‹ä¸æ‰§è¡Œçš„ä¸€æ ·ã€‚
è¿™æ„�味ç�€ç»“æ�œæ€»æ˜¯å�‘ negative æ— ç©·å¤§èˆ�入,并且永远ä¸�会å�‘生溢出。
Examples
#![feature(num_midpoint)]
assert_eq!(0u64.midpoint(4), 2);
assert_eq!(1u64.midpoint(4), 2);Run
Trait Implementations§source§impl Add<&u64> for &u64§type Output =