41 lines
1.6 KiB
Rust
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}");
|
|
}
|