diff --git a/zh-CN/src/basic-types/numbers.md b/zh-CN/src/basic-types/numbers.md index bbdcf5e..b1db2be 100644 --- a/zh-CN/src/basic-types/numbers.md +++ b/zh-CN/src/basic-types/numbers.md @@ -1 +1,157 @@ -# Numbers +# 数值类型 + +### 整数 + +🌟 移除某个部分让代码工作 + +> Tips: 如果我们没有显式的给予变量一个类型,那编译器会自动帮我们推导一个类型 + +```rust,editable + +fn main() { + let x: i32 = 5; + let mut y: u32 = 5; + + y = x; + + let z = 10; // 这里 z 的类型是? +} +``` + +🌟 填空 +```rust,editable + +fn main() { + let v: u16 = 38_u8 as __; +} +``` + +🌟🌟🌟 修改 `assert_eq!` 让代码工作 + +> Tips: 如果我们没有显式的给予变量一个类型,那编译器会自动帮我们推导一个类型 + +```rust,editable + +fn main() { + let x = 5; + assert_eq!("u32".to_string(), type_of(&x)); +} + +// 以下还输可以获取传入参数的类型,并返回类型的字符串形式,例如 "i8", "u8", "i32", "u32" +fn type_of(_: &T) -> String { + format!("{}", std::any::type_name::()) +} +``` + +🌟🌟 填空,让代码工作 +```rust,editable + +fn main() { + assert_eq!(i8::MAX, __); + assert_eq!(u8::MAX, __); +} +``` + +🌟🌟 解决代码中的错误和 `panic` +```rust,editable + +fn main() { + let v1 = 251_u8 + 8; + let v2 = i8::checked_add(251, 8).unwrap(); + println!("{},{}",v1,v2); +} +``` + +🌟🌟🌟 修改 `assert!` 让代码工作 +```rust,editable + +fn main() { + let v = 1_024 + 0xff + 0o77 + 0b1111_1111; + assert!(v == 1579); +} +``` + + +### 浮点数 +🌟 将 ? 替换成你的答案 + +```rust,editable + +fn main() { + let x = 1_000.000_1; // ? + let y: f32 = 0.12; // f32 + let z = 0.01_f64; // f64 +} +``` +🌟🌟🌟 使用两种方法来让下面代码工作 + +> Tips: 1. abs 2. f32 + +```rust,editable + +fn main() { + assert!(0.1+0.2==0.3); +} +``` + +### 序列Range +🌟🌟 两个目标: 1. 修改 `assert!` 让它工作 2. 让 `println!` 输出: 97 - 122 + +> Tips: 使用 `as u8` 将字符 `char` 转换成 `u8` 类型 +```rust,editable +fn main() { + let mut sum = 0; + for i in -3..2 { + sum += i + } + + assert!(sum == -3); + + for c in 'a'..='Z' { + println!("{}",c); + } +} +``` + +🌟🌟 填空 +```rust,editable + +use std::ops::{Range, RangeInclusive}; +fn main() { + assert_eq!((1..__), Range{ start: 1, end: 5 }); + assert_eq!((1..__), RangeInclusive::new(1, 5)); +} +``` + +### 计算 + +🌟 填空 + +```rust,editable + +fn main() { + // 整数加法 + assert!(1u32 + 2 == __); + + // 整数减法 + assert!(1i32 - 2 == __); + assert!(1u8 - 2 == -1); // 将 u8 修改为另一个类型来让代码工作 + assert!(3 * 50 == __); + + assert!(9.6 / 3.2 == 3.0); // error ! 修改它让代码工作 + + assert!(24 % 5 == __); + + // 逻辑与或非操作 + assert!(true && false == __); + assert!(true || false == __); + assert!(!true == __); + + // 位操作 + println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101); + println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101); + println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101); + println!("1 << 5 is {}", 1u32 << 5); + println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2); +} +```