首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rust基本数据类型

类型比起直接使用二进制数据,有许多优势: 减少开发者心智负担 安全 容易优化 常见的类型分类: 静态类型:在编译期对类型进行检查 动态类型:在运行期对类型进行检查 强类型:不允许类型转换 弱类型:允许进行类型转换...C 语言由于允许类型转换因此是静态弱类型语言,许多人易将 C 语言误认为静态强类型,需要特别注意: int main() { long a = 10; return a; } Rust...("My name is {0}, {1} {0}", "Bond"); // 编译将会报错, 请补上漏掉的参数:"James" } ---- 在不同类型之间转换 Rust 是一门强类型语言,因此不支持类型转换...("a={} b={}", a, b); } 数值转换的语义是: 两个相同大小的整型之间(例如:i32 -> u32)的转换是一个 no-op 从一个大的整型转换为一个小的整型(例如:u32 -> u8...0 舍入 从一个整型转换为一个浮点会产生整型的浮点表示,如有必要会舍入(未指定舍入策略) f32 转换为 f64 是完美无缺的 f64 转换为 f32 会产生最接近的可能值(未指定舍入策略)

87530

Rust - 安装环境、基本类型、流程控制、函数、模块、泛型、所有权

类型比起二进制数据,有许多优势:减少开发者心智负担安全、容易优化常见的类型分类:静态类型:在编译器对类型进行检查动态类型:在运行期对类型进行检查强类型:不允许类型转换弱类型:允许类型转换Rust...u8), IPv6(u8,u8,u8,u8,u8,u8,u8,u8,u8,u8,u8,u8),}fn main() { let localhost :IPAddr = IPAddr::IPv4...fn action(method:fn(u32,u32)->u32,a: u32,b: u32) -> u32 { method(a,b);}fn add(a:u32,b:u32) -> u32...("{}",action(add,10,20))}发散函数发散函数指的是永远不会被返回,它们的返回值标记!,这是一个空类型。...("{}",s2_ref);}生命周期注解生命周期注解不会改变之前生命周期的长短,它还是原来的生命周期,注解是给编译器看的,拥有相同的生命周期注解,生命周期都是一样的。

1.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

第3章 | 基本数据类型 | 3.1 固定宽度的述职类型

表 3-4:Rust 有符号整型 -27 27-1(-128 127) Rust 会使用 u8 类型作为字节值。例如,二进制文件或套接字中读取数据时会产生一个 u8 值构成的流。...("{}", f64::sqrt(2.0)); 与 C 和 C++ 不同,Rust 几乎不会执行任何的数值转换。如果函数需要 f64 参数,则传入 i32 型参数是错误的。...事实上,Rust 甚至不会地将 i16 值转换为 i32 值,虽然每个 i16 值都必然在 i32 范围内。不过,你随时可以用 as 运算符写出显转换:i as f64 或 x as i32。...缺少转换有时会让 Rust 表达式比类似的 C 或 C++ 代码更冗长。然而,整数转换有着导致错误和安全漏洞的大量“前科”,特别是在用这种整数表示内存中某些内容的大小时,很可能发生意外溢出。...根据以往的经验,Rust 这种要求明确写出数值类型转换的行为,会提醒我们注意一些可能错过的问题。

9210

Rust中saturating_sub的使用

("结果为:{}", result); } u8即 无符号 8 位整数,可表示的范围为0 255....使用saturating_sub, 则不会产生溢出, 会是u8类型的最小值,即0 使用饱和减法可以避免由于溢出导致的不期望的行为,确保结果始终在有效的数值范围内。...对于无符号整数 u32 来说,这种下溢会导致结果变成一个非常大的数,因为 u32 不能表示负数。使用 saturating_sub 后,当减法结果为负时,它会返回 0(即 u32 能表示的最小值)。...和普通的减法操作相比,当发生溢出时,它会“包裹”类型的最大或最小值,而不是引发溢出错误或产生未定义行为。...使用 wrapping_sub 后,结果会 0 下溢 255,而不是引发 panic。

30710

Rust实战系列-深入理解数据

⚠️ 警告:unsafe 意味着程序员要对程序的完整性负全责。...科学记数法中的每个二进制位代表不同的角色: (1)符号,在上面的两个例子中,正数的符号(+号)是的,对负数(-)要显示表示 (2)尾数,也称为有效位(1.898 和 3.801) (3)底数,也称为基数...随机字节生成位于 0 和 1 之间的 f32 类型值 这是一个有的有趣示例,想象一下,你希望将一个字节的随机值转换为 0 1 之间的浮点数,如果直接通过 mem::transmute 方法把传入的字节解释为...)转换为 f32 类型 对返回值的范围进行归一化(0.0 0.996 之间) 很容易对以上函数的进行测试: fn mock_rand(n: u8) -> f32 { let base: u32...* 2) = {}", cpu.registers[0]); } 操作码 0x2100:CALL 0x100 处的函数 操作码 0x2100:CALL 0x100 处的函数 操作码 0x0000:执行

1.2K20

u8u3_u8计算后会变为u16

阴码+逐列 +顺向+C51 格式 void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode) { u8 temp...第一列开始向下 每取 8 个点作为一个字节,如果最后不足 8 个点就补满 8 位。取模顺序是低,即第一个点作为最高位。...oled_pow(u8 m,u8 n) { u32 result=1; while(n–)result*=m; return result; } 这个函数我觉得你并不理解,不然也就不会不明白...,比如1,2,3…而不是数字的ASCII码,所以这里需要以‘0’做基准把数字转换为其ASCII码,可以猜测,OLED_ShowChar()函数是传入一个ASCII码,在ASCII码字模表中取模显示对应的字符...将实参代入形参即m为累乘数据,n为数据长度-已处理位数-1 (此处的减一是为了适应C语言计数到“0”为止) u32 oled_pow(u8 m,u8 n) { u32 result=1; while

1.1K10

Rust修仙笔记之筑基期

结果上来看,2把1遮蔽了,3把2遮蔽了,但是4引用的是2处的变量 遮蔽变量类型不可变 在以上我们重复用let定义了不可变量,我们发现遮蔽变量不可重新赋值且类型不可变 fn main() { let...当我们使用的一个mut申明的变量,再没有使用时候,会警告 fn main() { let mut y: u32 = 5; y = 10; println!...如果我想把字符串类型转换成数字类型,那如何做到呢?...("{} -> {}", boolean, binary); } enum // 消除警告,使用枚举类型取值 #[allow(dead_code)] // 加了这个不会报错,第15【Color::...我们学习了rust中最基本的数据类型,主要分两大类,标量类型与复合类型,其中标量类型主要包含,整型、浮点型、布尔型、字符串型,复合类型主要包括,元组类型与数组类型 了解use,if,match,for

8910

CA1065:不要在意外的位置引发异常

强制转换运算符 以下各节讨论了这些方法类型。...因此, Dispose 显引发异常将强制用户在 finally 子句内添加异常处理。 Dispose (false) 代码路径应始终不会引发异常,因为 Dispose 几乎都是终结器调用的。...=) 与 Equals 方法一样,相等运算符应返回 true 或 false,而不应引发异常。 强制转换运算符 由于用户通常不知道已调用了强制转换运算符,因此对它引发的异常会感到意外。...因此,强制转换运算符不应引发异常。 如何解决冲突 对于属性 Getter,可更改逻辑,使其不再需要引发异常,或将属性更改为方法。...对于前面列出的所有其他方法类型,可更改逻辑,使其不再必须引发异常。 何时禁止显示警告 如果冲突是由异常声明而不是引发的异常造成的,则可禁止显示此规则发出的警告

62220

【译】为 嵌入 C 程序员编写的 Rust 指南

类型(Type) Rust 和 C 对类型的处理方法大致相同,尽管 Rust 很少有转换。在这一节中,我们将讨论如何将 C 语言类型转换为 Rust 类型。...(uint8_t) x被写成u8。整数类型之间从不进行转换,甚至在有符号和无符号变体之间也是如此。...它不能与整数转换,否则就是一个u8,保证具有0x00或0x01的值,以及各自的字面意义false和true。bool支持所有的位操作,是唯一与短路的&&和||兼容的类型。...Rust数组是 "真正的 "类型,与C不同,它们可以通过值传递函数中,并通过值函数中返回。当传入函数时,它们也不会衰变为指针。 指针 像其他所有的嵌入语言一样,Rust 也有指针。...C "是我们真正关心的唯一一个,它将调用约定转换为系统的C ABI。默认的、的调用约定是extern "Rust "。

4.6K30

Rust入坑指南:常规套路

果然不会报错了。感谢IDEA。接下来运行试试 The value of x is: 5 The value of x is: 6 打印结果符合我们的预期。...let s = "123"; let s: u32 = s.parse().expect("Not a number!"); 这样定义之后,再使用变量s时,它都是u32类型的变量了。...整数型 Rust支持的整数类型分为有符号整数和无符号整数 Length Signed Unsigned 8-bit i8 u8 16-bit i16 u16 32-bit i32 u32 64-bit...布尔类型 布尔类型没有什么特别的,Rust支持和显声明两种 let t = true; let f: bool = false; 字符型 需要注意的是字符类型char使用单引号,字符串使用双引号...范围是U+0000U+D7FF和U+E000U+10FFFF。这意味着它可以是中文韩文 emoji等等,而并不局限于直觉上的「字符」。

67620

ziglang30分钟速成

如果你在调试模式下意外使用它引发错误,Zig 将使用 0XAA 字节填充一个虚拟值,以帮助检测错误。...pub关键字表示函数可以当前作用域导出,使其它地方可以调用。下面示例是一个不返回任何值的函数(foo)。pub关键字表示该函数可以当前作用域导出,这就是为什么main函数必须是pub的。...其可以将枚举的值设置为整数,但它不会自动强制转换,你必须使用@enumToInt或@intToEnum来进行转换。...你可以使用切片操作数组或其他切片构造切片。与数组类似,切片有一个len字段,告诉它的长度。 注意:切片操作中的间隔参数是开口的(不包含在内)。尝试访问超出切片范围的元素会引发运行时panic。...这使得调用堆的任何东西(基本上是可失败的操作)都是显的。 您可以仔细调整权衡,并使用标准数据结构而无需重写标准库。 您可以在测试中运行非常安全的分配器,并在发布/生产环境中切换到不同的分配器。

45110

没有串口,如何打印单片机调试信息?

输出调试信息是嵌入开发中必不可少的调试利器,嵌入开发的一个特点是很多时候没有操作系统,或者没有文件系统,常规的打印log文件的方法基本不适用。...//redirect fputc int fputc(int ch, FILE *f) { print_ch((u8)ch); return ch; } 写入数据Sram: /*write...#endif 在需要打印log的地方直接调用DEBUG()即可,最终效果如下,Memory窗口可以看到打印的log: 通过SWO输出log 通过打印logSRAM的方式可以看到log,但是数据量多的时候可能来不及查看就被覆盖了...)(u8* buffer, u32 len); }log_func; typedef struct { volatile u8 type; u8* buffer...要解决这个问题,就是要解决CPU与输出数据串口同时进行的问题,嵌入工程师立马可以想到DMA正是好的解决途径。

1.2K10

第3章 | 基本数据类型 | 布尔类型,字符,元组,指针类型

笔记 Rust 的 bool 类型和 javascript 中的类似,因为 Rust 强类型语言,所以不需要 === 来减少类型转换开销从而提高程序性能 许多语言对在要求布尔值的上下文中使用其他类型的值持宽松态度...,比如 C 和 C++ 会把字符、整数、浮点数和指针转换成布尔值,因此它们可以直接用作 if 语句或 while 语句中的条件。...(true as i32, 1); 但是,as 无法进行另一个方向(数值类型 bool)的转换。相反,你必须显地写出比较表达式,比如 x != 0。...Rust 不会在 char 和任何其他类型之间进行转换。可以使用 as 转换运算符将 char 转换为整型,对于小于 32 位的类型,该字符值的高位会被截断: assert_eq!...('ಠ' as i8, -0x60); // U+0CA0截断8位,有符号 另一个方向来看,u8 是唯一能通过 as 运算符转换为 char 的类型,因为 Rust 刻意让 as 运算符只执行开销极低且可靠的转换

8110

【Rust 易学教程】第 1 天:Rust 基础,基本语法

宏是“卫生的”,意味着它们不会意外地它们所使用的范围中捕获标识符。Rust 宏实际上只是部分卫生的。 Rust 是多范式的。...例如,它具有强大的面向对象编程特性,而且,虽然它不是函数语言,但它包含了一系列函数概念。 根据上面的小结,你是否也能发现 Rust 的一些独特卖点: 编译时内存安全。...不,令人惊讶的是,即使在最新的GCC版本(撰写本文时为13.2)中,该代码也会在默认警告级别下编译无警告。 这不是一个非常不现实的例子吗? 绝对不是,这类错误在过去会导致严重的安全漏洞。...标量类型 类型 示例 有符号整数 i8, i16, i32, i64, i128, isize -10, 0, 1_000, 123_i64 无符号整数 u8, u16, u32, u64, u128...第一个表示可以绑定不同值的可变引用,而第二个表示对可变值的引用。

29120
领券