当前位置: 首页 > news >正文

什么是网站及其制作步骤上海做网站设计

什么是网站及其制作步骤,上海做网站设计,电路板东莞网站建设,asp.net建立网站吗文章目录 一、概述二、数值类型2.1、整数类型2.2、浮点类型2.3、数字运算2.4、位运算2.5、序列#xff08;Range#xff09;2.6、有理数和复数 三、字符、布尔、单元类型3.1、字符类型3.2、布尔类型#xff08;bool#xff09;3.3、单元类型 团队博客: 汽车电子社区 一、概… 文章目录 一、概述二、数值类型2.1、整数类型2.2、浮点类型2.3、数字运算2.4、位运算2.5、序列Range2.6、有理数和复数 三、字符、布尔、单元类型3.1、字符类型3.2、布尔类型bool3.3、单元类型 团队博客: 汽车电子社区 一、概述 Rust基本类型有如下几种     1、数值类型: 有符号整数 (i8, i16, i32, i64, isize)、 无符号整数 (u8, u16, u32, u64, usize) 、浮点数 (f32, f64)、以及有理数、复数。     2、字符串字符串字面量和字符串切片 str。     3、布尔类型 true和false。     4、字符类型: 表示单个 Unicode 字符存储为 4 个字节。     5、单元类型: 即 () 其唯一的值也是 ()。 二、数值类型 2.1、整数类型 整数是没有小数部分的数字。之前使用过的 i32 类型表示有符号的 32 位整数 i 是英文单词 integer 的首字母与之相反的是 u代表无符号 unsigned 类型。下表显示了 Rust 中的内置的整数类型   isize 和 usize 类型取决于程序运行的计算机 CPU 类型 若 CPU 是 32 位的则这两个类型是 32 位的同理若 CPU 是 64 位那么它们则是 64 位。   整形字面量可以用下表的形式书写   整型溢出:   假设有一个 u8 它可以存放从 0 到 255 的值。那么当你将其修改为范围之外的值比如 256则会发生整型溢出。关于这一行为 Rust 有一些有趣的规则当在 debug 模式编译时Rust 会检查整型溢出若存在这些问题则使程序在编译时 panic(崩溃,Rust 使用这个术语来表明程序因错误而退出)。   在当使用 --release 参数进行 release 模式构建时Rust 不检测溢出。相反当检测到整型溢出时Rust 会按照补码循环溢出two’s complement wrapping的规则处理。简而言之大于该类型最大值的数值会被补码转换成该类型能够支持的对应数字的最小值。比如在 u8 的情况下256 变成 0257 变成 1依此类推。程序不会 panic但是该变量的值可能不是你期望的值。依赖这种默认行为的代码都应该被认为是错误的代码。 要显式处理可能的溢出可以使用标准库针对原始数字类型提供的这些方法     1、使用 wrapping_* 方法在所有模式下都按照补码循环溢出规则处理例如 wrapping_add。     2、如果使用 checked_* 方法时发生溢出则返回None值。     3、使用 overflowing_* 方法返回该值和一个指示是否存在溢出的布尔值。     4、使用 saturating_* 方法使值达到最小值或最大值。 2.2、浮点类型 浮点类型数字 是带有小数点的数字在 Rust 中浮点类型数字也有两种基本类型 f32 和 f64分别为 32 位和 64 位大小。默认浮点类型是 f64在现代的 CPU 中它的速度与 f32 几乎相同但精度更高。 fn main() {let x 2.0; // f64let y: f32 3.0; // f32 }浮点数陷阱   浮点数由于底层格式的特殊性导致了如果在使用浮点数时不够谨慎就可能造成危险有两个原因     1、浮点数往往是你想要数字的近似表达 浮点数类型是基于二进制实现的但是我们想要计算的数字往往是基于十进制例如 0.1 在二进制上并不存在精确的表达形式但是在十进制上就存在。这种不匹配性导致一定的歧义性更多的虽然浮点数能代表真实的数值但是由于底层格式问题它往往受限于定长的浮点数精度如果你想要表达完全精准的真实数字只有使用无限精度的浮点数才行。     2、浮点数在某些特性上是反直觉的 例如大家都会觉得浮点数可以进行比较对吧是的它们确实可以使用 等进行比较但是在某些场景下这种直觉上的比较特性反而会害了你。因为 f32 f64 上的比较运算实现的是 std::cmp::PartialEq 特征(类似其他语言的接口)但是并没有实现 std::cmp::Eq 特征但是后者在其它数值类型上都有定义说了这么多可能大家还是云里雾里用一个例子来举例   Rust 的 HashMap 数据结构是一个 KV 类型的 Hash Map 实现它对于 K 没有特定类型的限制但是要求能用作 K 的类型必须实现了 std::cmp::Eq 特征因此这意味着你无法使用浮点数作为 HashMap 的 Key来存储键值对但是作为对比Rust 的整数类型、字符串类型、布尔类型都实现了该特征因此可以作为 HashMap 的 Key。   为了避免上面说的两个陷阱你需要遵守以下准则     1、避免在浮点数上测试相等性。     2、当结果在数学上可能存在未定义时需要格外的小心。 NaN   对于数学上未定义的结果例如对负数取平方根 -42.1.sqrt() 会产生一个特殊的结果Rust 的浮点数类型使用 NaN (not a number)来处理这些情况。   所有跟 NaN 交互的操作都会返回一个 NaN而且 NaN 不能用来比较下面的代码会崩溃 fn main() {let x (-42.0_f32).sqrt();assert_eq!(x, x); }出于防御性编程的考虑可以使用 is_nan() 等方法可以用来判断一个数值是否是 NaN fn main() {let x (-42.0_f32).sqrt();if x.is_nan() {println!(未定义的数学行为)} }2.3、数字运算 Rust 支持所有数字类型的基本数学运算加法、减法、乘法、除法和取模运算。下面代码各使用一条 let 语句来说明相应运算的用法 fn main() {// 加法let sum 5 10;// 减法let difference 95.5 - 4.3;// 乘法let product 4 * 30;// 除法let quotient 56.7 / 32.2;// 求余let remainder 43 % 5; }fn main() {// 编译器会进行自动推导给予twenty i32的类型let twenty 20;// 类型标注let twenty_one: i32 21;// 通过类型后缀的方式进行类型标注22是i32类型let twenty_two 22i32;// 只有同样类型才能运算let addition twenty twenty_one twenty_two;println!({} {} {} {}, twenty, twenty_one, twenty_two, addition);// 对于较长的数字可以用_进行分割提升可读性let one_million: i64 1_000_000;println!({}, one_million.pow(2));// 定义一个f32数组其中42.0会自动被推导为f32类型let forty_twos [42.0,42f32,42.0_f32,];// 打印数组中第一个值并控制小数位为2位println!({:.2}, forty_twos[0]); }2.4、位运算 Rust的运算基本上和其他语言一样。 fn main() {// 二进制为00000010let a:i32 2;// 二进制为00000011let b:i32 3;println!((a b) value is {}, a b);println!((a | b) value is {}, a | b);println!((a ^ b) value is {}, a ^ b);println!((!b) value is {} , !b);println!((a b) value is {}, a b);println!((a b) value is {}, a b);let mut a a;// 注意这些计算符除了!之外都可以加上进行赋值 (因为!要用来判断不等于)a b;println!((a b) value is {}, a); }2.5、序列Range Rust 提供了一个非常简洁的方式用来生成连续的数值例如 1…5生成从 1 到 4 的连续数字不包含 5 1…5生成从 1 到 5 的连续数字包含 5它的用途很简单常常用于循环中 for i in 1..5 {println!({},i); }序列只允许用于数字或字符类型原因是它们可以连续同时编译器在编译期可以检查该序列是否为空字符和数字值是 Rust 中仅有的可以用于判断是否为空的类型。如下是一个使用字符类型序列的例子 for i in a..z {println!({},i); }2.6、有理数和复数 Rust 的标准库相比其它语言准入门槛较高因此有理数和复数并未包含在标准库中     1、有理数和复数。     2、任意大小的整数和任意精度的浮点数。     3、固定精度的十进制小数常用于货币相关的场景。   好在社区已经开发出高质量的 Rust 数值库num。 use num::complex::Complex;fn main() {let a Complex { re: 2.1, im: -1.2 };let b Complex::new(11.1, 22.2);let result a b;println!({} {}i, result.re, result.im)}三、字符、布尔、单元类型 3.1、字符类型 fn main() {let c z;let z ℤ;let g 国;let heart_eyed_cat ; }Rust 的字符不仅仅是 ASCII所有的 Unicode 值都可以作为 Rust 字符包括单个的中文、日文、韩文、emoji 表情符号等等都是合法的字符类型。Unicode 值的范围从 U0000 ~ UD7FF 和 UE000 ~ U10FFFF。不过“字符”并不是 Unicode 中的一个概念所以人在直觉上对“字符”的理解和 Rust 的字符概念并不一致。   由于 Unicode 都是 4 个字节编码因此字符类型也是占用 4 个字节 fn main() {let x 中;println!(字符中占用了{}字节的内存大小,std::mem::size_of_val(x)); }Rust 的字符只能用 ‘’ 来表示 “” 是留给字符串的 3.2、布尔类型bool Rust 中的布尔类型有两个可能的值true 和 false布尔值占用内存的大小为 1 个字节 fn main() {let t true;let f: bool false; // 使用类型标注,显式指定f的类型if f {println!(这是段毫无意义的代码);} }3.3、单元类型 单元类型就是 () 对你没看错就是 () 唯一的值也是 () 一些读者读到这里可能就不愿意了你也太敷衍了吧管这叫类型   只能说再不起眼的东西都有其用途在目前为止的学习过程中大家已经看到过很多次 fn main() 函数的使用吧那么这个函数返回什么呢   没错 main 函数就返回这个单元类型 ()你不能说 main 函数无返回值因为没有返回值的函数在 Rust 中是有单独的定义的发散函数( diverge function )顾名思义无法收敛的函数。   例如常见的 println!() 的返回值也是单元类型 ()。   再比如你可以用 () 作为 map 的值表示我们不关注具体的值只关注 key。 这种用法和 Go 语言的 struct{} 类似可以作为一个值用来占位但是完全不占用任何内存。
http://www.w-s-a.com/news/686244/

相关文章:

  • 建站行业市场人力管理系统
  • qq钓鱼网站在线生成器google关键词搜索工具
  • 化妆网站模板移动网站建设模板
  • 欢迎访问语文建设杂志网站网站蓝色配色
  • 最新网站发布重庆城乡建设部网站首页
  • 网站建设费用高鄂尔多斯seo
  • dw做网站怎么发布网站无后台可以上框架
  • 网络公司如何建网站网站的建设需要多少钱
  • 代刷网站推广快速泉州网页定制
  • 网站优秀网站地址做宣传册的公司
  • 苏州高端网站建设咨询wordpress云图插件
  • 河北省建设厅网站重新安装优秀中文网页设计
  • 如何在腾讯云做网站开源站群cms
  • 公司网站建设的意义网易做网站
  • 网络营销案例分析与实践搜外seo
  • 手机建网站挣钱吗wordpress面包屑
  • 淘客做网站怎么备案网站开发工具的是什么
  • 提供大良网站建设郑州网站建设网站开发
  • 邢台做wap网站价格wordpress评论滑动
  • 绝味鸭脖网站建设规划书江苏建设人才网 官网
  • 网站源码授权破解centos wordpress 整站
  • 建设一个私人视频网站wordpress js
  • 手机企业网站制作流程3d建模自学
  • 网站优化方案和实施wordpress的归档
  • 建设事业单位网站多少钱集艾设计公司官网
  • 网站建设与管理方案书图片的制作方法
  • 中文建网站美发网站模板带手机版
  • 免费聊天不充值软件windows优化大师下载安装
  • 网站优化的关键词自己怎么做外贸网站空间
  • 现在建设的网站有什么劣势温州互联网公司