#[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}"); }