PR3-Rust-SS26/B-basics/4-arithmetik.rs

41 lines
1.6 KiB
Rust

#[allow(non_snake_case)] // Dafür da, dass moduloInKurz ohne Meckern geschrieben werden kann
#[allow(overflowing_literals)] // Für Overflow Spaß
// Casting auch hier
fn main() {
// Grundrechenarten sind alle wie in anderen Sprachen, nichts spannendes
let summe: i32 = 12 + 23;
let differenz: i32 = summe - 10;
let produkt: i32 = differenz * summe;
let quotient: i32 = produkt / differenz;
let modulo: i32 = quotient % 2;
// Casting durch explizites angeben des Typs, implizit ist es nicht möglich
// modulo benötigt jetzt keine 32 Bits, man kann es auch in i8 packen
let moduloInKurz = modulo as i8;
println!("{moduloInKurz}");
// Casting von Floating Point Zahlen
let eulerDoppelt: f64 = 2.71828182846;
println!("{eulerDoppelt}");
let eulerEinfach: f32 = eulerDoppelt as f32;
println!("{eulerEinfach}");
// Bei as Konvertierungen von Float in u8 kommt es beim Überschreiten der Grenze zu keinem Overflow, ab der Grenze wird abgeschnitten
println!(" 300.0 as u8 is : {}", 300.0_f32 as u8);
println!("-100.0 as u8 is : {}", -100.0_f32 as u8);
println!(" nan as u8 is : {}", f32::NAN as u8);
// Man kann aber auch witzigere Sachen machen
println!("{}", 10000000 as u8);
// Casting mit Overflow ist dank der oberen Präprozessoranweisung möglich
let integer: i32 = -12345;
let unsigned = integer as u8;
println!("{unsigned}");
// Problemloses casten in char ist mit as nur möglich, wenn der Ursprungswert ein u8 ist
let character = unsigned as char;
println!("{character}");
}