【Rust練習】2.數值類型

練習題來自https://practice-zh.course.rs/basic-types/numbers.html

1

// 移除某個部分讓代碼工作
fn main() {let x: i32 = 5;let mut y: u32 = 5;y = x;let z = 10; // 這里 z 的類型是? 
}

y的類型不對,另外,數字的默認類型是i32

fn main() {let x: i32 = 5;let mut y: i32 = 5;y = x;let z = 10; // 這里 z 的類型是 i32
}

2

// 填空
fn main() {let v: u16 = 38_u8 as __;
}

同理,這里的__應該是u16,以最后確定的類型為準

3 如果我們沒有顯式的給予變量一個類型,那編譯器會自動幫我們推導一個類型

// 修改 `assert_eq!` 讓代碼工作
fn main() {let x = 5;assert_eq!("u32".to_string(), type_of(&x));
}// 以下函數可以獲取傳入參數的類型,并返回類型的字符串形式,例如  "i8", "u8", "i32", "u32"
fn type_of<T>(_: &T) -> String {format!("{}", std::any::type_name::<T>())
}

數字類型默認推導為i32,這里改為i32即可。

// 修改 `assert_eq!` 讓代碼工作
fn main() {let x = 5;assert_eq!("i32".to_string(), type_of(&x));
}

4

// 填空,讓代碼工作
fn main() {assert_eq!(i8::MAX, __); assert_eq!(u8::MAX, __); 
}

8位有符號數,一位表示為符號,最大值即為2^7-1;無符號數就是2^8-1

// 填空,讓代碼工作
fn main() {assert_eq!(i8::MAX, 127); assert_eq!(u8::MAX, 255); 
}

5

// 解決代碼中的錯誤和 `panic`
fn main() {let v1 = 251_u8 + 8;let v2 = i8::checked_add(251, 8).unwrap();println!("{},{}",v1,v2);
}

251+8會超過u8的上限,同樣,251本身也不是一個合法的i8值,rust默認不允許溢出,全部改成u16/i16即可。

// 解決代碼中的錯誤和 `panic`
fn main() {let v1 = 251_u16 + 8;let v2 = i16::checked_add(251, 8).unwrap();println!("{},{}",v1,v2);
}

6

// 修改 `assert!` 讓代碼工作
fn main() {let v = 1_024 + 0xff + 0o77 + 0b1111_1111;assert!(v == 1579);
}

轉換成十進制實際上是1024+(1615+115)+(78+71)+… = 1597

// 修改 `assert!` 讓代碼工作
fn main() {let v = 1_024 + 0xff + 0o77 + 0b1111_1111;assert!(v == 1597);
}

7


// 將 ? 替換成你的答案
fn main() {let x = 1_000.000_1; // ?let y: f32 = 0.12; // f32let z = 0.01_f64; // f64
}

默認的浮點數類型為f32,這里填寫即可。

8

fn main() {assert!(0.1+0.2==0.3);
}

說是用兩種方法,我覺得有意義的只有一種。

fn main() {assert!((0.1_f64 + 0.2 - 0.3).abs() < 0.00001);
}

9 🌟🌟 兩個目標: 1. 修改 assert! 讓它工作 2. 讓 println! 輸出: 97 - 122

fn main() {let mut sum = 0;for i in -3..2 {sum += i}assert!(sum == -3);for c in 'a'..='z' {println!("{}",c);}
}

第一個是左閉右開區間,改成左閉右閉就行;第二個需要轉換,從字符轉成u8,不過不能像C++一樣直接輸出。

fn main() {let mut sum = 0;for i in -3..=2 {sum += i}assert!(sum == -3);for c in 'a'..='z' {println!("{}",c as u8);}
}

10

// 填空
use std::ops::{Range, RangeInclusive};
fn main() {assert_eq!((1..__), Range{ start: 1, end: 5 });assert_eq!((1..__), RangeInclusive::new(1, 5));
}

這個知識點前面也沒有講過。

首先形如(x..y)的左閉右開區間,默認推導為range,所以第一個右邊為5;而形如(x..=y)的左閉右閉,默認推導為RangeInclusive,所以右邊填=5

// 填空
use std::ops::{Range, RangeInclusive};
fn main() {assert_eq!((1..5), Range{ start: 1, end: 5 });assert_eq!((1..=5), RangeInclusive::new(1, 5));
}

11

// 填空,并解決錯誤
fn main() {// 整數加法assert!(1u32 + 2 == __);// 整數減法assert!(1i32 - 2 == __);assert!(1u8 - 2 == -1);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);
}
fn main() {// Integer additionassert!(1u32 + 2 == 3);// Integer subtractionassert!(1i32 - 2 == -1);assert!(1i8 - 2 == -1);assert!(3 * 50 == 150);assert!(9 / 3 == 3); // error ! make it workassert!(24 % 5 == 4);// Short-circuiting boolean logicassert!(true && false == false);assert!(true || false == true);assert!(!true == false);// Bitwise operationsprintln!("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);
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45239.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jupyter Lab 使用

Jupyter Lab 使用詳解 Jupyter Lab 是一個基于 Web 的交互式開發環境&#xff0c;提供了比 Jupyter Notebook 更加靈活和強大的用戶界面和功能。以下是使用 Jupyter Lab 的詳細指南&#xff0c;包括安裝、基本使用、設置根目錄和擴展功能等內容。 一、Jupyter Lab 安裝與啟動…

HTTP背后的故事:理解現代網絡如何工作的關鍵(一)

一.HTTP是什么 概念 &#xff1a; 1.HTTP ( 全稱為 " 超文本傳輸協議 ") 是一種應用非常廣泛的 應用層協議。 2.HTTP 誕生與1991年. 目前已經發展為最主流使用的一種應用層協議. 3.HTTP 往往是基于傳輸層的 TCP 協議實現的 . (HTTP1.0, HTTP1.1, HTTP2.0 均為 T…

DelphiXE內存泄漏問題,已經發生了很多次

內存泄漏的地方一定要注意: 不斷分配的Tbytes會導致內存泄漏,發生以下錯誤: Access violation at address CA5ED400. Execution of address CA5ED400 {=====內存泄漏最大的地方、居然沒有釋放=====} //SetLength(tbuff,length(Adata)); //Move(Adata,Tbuff,length(…

2024世界人工智能大會(WAIC)學習總結

1 前言 在2024年的世界人工智能大會&#xff08;WAIC&#xff09;上&#xff0c;我們見證了從農業社會到工業社會再到數字化社會的深刻轉變。這一進程不僅體現在技術的單點爆發&#xff0c;更引發了整個產業鏈的全面突破&#xff0c;未來將是技術以指數級速度發展的嶄新時代。…

等保測評別犯難,黑龍江等保測評服務流程來啦!

引言 在當今數字化時代&#xff0c;網絡安全已經成為企業發展的基石。為了響應國家網絡安全等級保護&#xff08;簡稱“等保”&#xff09;政策&#xff0c;黑龍江地區的企業紛紛啟動了等保測評工作。然而&#xff0c;對于很多企業而言&#xff0c;等保測評似乎是一項既復雜又…

【從0到1進階Redis】主從復制 — 主從機宕機測試

上一篇&#xff1a;【從0到1進階Redis】主從復制 測試&#xff1a;主機斷開連接&#xff0c;從機依舊連接到主機的&#xff0c;但是沒有寫操作&#xff0c;這個時候&#xff0c;主機如果回來了&#xff0c;從機依舊可以直接獲取到主機寫的信息。 如果是使用命令行&#xff0c;來…

PyTorch深度學習實戰(46)——深度Q學習

PyTorch深度學習實戰&#xff08;46&#xff09;——深度Q學習 0. 前言1. 深度 Q 學習2. 網絡架構3. 實現深度 Q 學習模型進行 CartPole 游戲小結系列鏈接 0. 前言 我們已經學習了如何構建一個 Q 表&#xff0c;通過在多個 episode 中重復進行游戲獲取與給定狀態-動作組合相對…

Hypertable install of rhel6.0

1.rpm 安裝:(如果已存在,會提示沖突,使用--replacefiles) 1.1 編譯環境 安裝gcc gcc-c++ make cmake(在admin machine上,放置rpm包的文件里依次執行下面的語句): sudo rpm -ivh cpp-4.4.6-4.el6.x86_64.rpm --replacefiles sudo rpm -ivh libgcc-4.4.6-4.el6.x86_64.rp…

【學習筆記】無人機(UAV)在3GPP系統中的增強支持(十四)-無人機操控關鍵績效指標(KPI)框架

引言 本文是3GPP TR 22.829 V17.1.0技術報告&#xff0c;專注于無人機&#xff08;UAV&#xff09;在3GPP系統中的增強支持。文章提出了多個無人機應用場景&#xff0c;分析了相應的能力要求&#xff0c;并建議了新的服務級別要求和關鍵性能指標&#xff08;KPIs&#xff09;。…

第二證券:轉融通是什么意思?什么是轉融通?

轉融通&#xff0c;包含轉融資和轉融券&#xff0c;實質是借錢和借券。轉融通是指證券金融公司借入證券、籌得資金后&#xff0c;再轉借給證券公司&#xff0c;是一假貸聯絡&#xff0c;具體是指證券公司從符合要求的基金處理公司、保險公司、社保基金等組織出資者融券&#xf…

Python應用開發——30天學習Streamlit Python包進行APP的構建(15):優化性能并為應用程序添加狀態

Caching and state 優化性能并為應用程序添加狀態! Caching 緩存 Streamlit 為數據和全局資源提供了強大的緩存原語。即使從網絡加載數據、處理大型數據集或執行昂貴的計算,它們也能讓您的應用程序保持高性能。 本頁僅包含有關 st.cache_data API 的信息。如需深入了解緩…

技術成神之路:設計模式(六)策略模式

1.介紹 策略模式&#xff08;Strategy Pattern&#xff09;是一種行為型設計模式&#xff0c;它定義了一系列算法&#xff0c;封裝每一個算法&#xff0c;并使它們可以相互替換。策略模式使得算法的變化獨立于使用算法的客戶端。 2.主要作用 策略模式的主要作用是將算法或行為…

面試問題梳理:項目中防止配置中的密碼泄露-Jasypt

背景 想起面試的時候&#xff0c;面試官問我現在大家用Spring框架&#xff0c;數據庫、ES之類的密碼都是配置在配置文件中的&#xff0c;有很大的安全隱患&#xff0c;你有考慮過怎么解決嘛&#xff1f; 當時我回答是可以在項目啟動的過程中的命令行追加的方式&#xff0c;感覺…

Hello,World!(C++)

題目描述 編寫一個能夠輸出 Hello,World! 的程序。 提示&#xff1a; - 使用英文標點符號&#xff1b; Hello,World! 逗號后面沒有空格。 H 和 W 為大寫字母。 樣例 #1 樣例輸入 #1 無 樣例輸出 #1 Hello,World! &#xff08;1&#xff09; #include<bits/stdc.…

力扣題解( 讓字符串成為回文串的最少插入次數)

1312. 讓字符串成為回文串的最少插入次數 給你一個字符串 s &#xff0c;每一次操作你都可以在字符串的任意位置插入任意字符。 請你返回讓 s 成為回文串的 最少操作次數 。 「回文串」是正讀和反讀都相同的字符串。 思路&#xff1a; 本題要求的是最少插入次數&#xff0c;…

什么叫圖像的雙邊濾波,并附利用OpenCV和MATLB實現雙邊濾波的代碼

雙邊濾波&#xff08;Bilateral Filtering&#xff09;是一種在圖像處理中常用的非線性濾波技術&#xff0c;主要用于去噪和保邊。它在空間域和像素值域上同時進行加權&#xff0c;既考慮了像素之間的空間距離&#xff0c;也考慮了像素值之間的相似度&#xff0c;從而能夠有效地…

手機怎么看WiFi的IP地址

在如今數字化快速發展的時代&#xff0c;無線網絡已成為我們日常生活中不可或缺的一部分。無論是工作、學習還是娛樂&#xff0c;我們可能都離不開WiFi的陪伴。然而&#xff0c;在使用WiFi的過程中&#xff0c;有時我們可能需要查看其IP地址&#xff0c;以便更好地管理我們的網…

【動態規劃】背包問題 {01背包問題;完全背包問題;二維費用背包問題}

一、背包問題概述 背包問題(Knapsackproblem)是?種組合優化的NP完全問題。 問題可以描述為&#xff1a;給定一組物品&#xff0c;每種物品都有自己的重量和價格&#xff0c;在限定的總重量內&#xff0c;我們如何選擇&#xff0c;才能使得物品的總價格最?。 根據物品的個數…

鏈接追蹤系列-07.logstash安裝json_lines插件

進入docker中的logstash 容器內&#xff1a; jelexbogon ~ % docker exec -it 7ee8960c99a31e607f346b2802419b8b819cc860863bc283cb7483bc03ba1420 /bin/sh $ pwd /usr/share/logstash $ ls bin CONTRIBUTORS Gemfile jdk logstash-core modules tools x-pack …

語音識別概述

語音識別概述 一.什么是語音&#xff1f; 語音是語言的聲學表現形式&#xff0c;是人類自然的交流工具。 圖片來源&#xff1a;https://www.shenlanxueyuan.com/course/381 二.語音識別的定義 語音識別&#xff08;Automatic Speech Recognition, ASR 或 Speech to Text, ST…