Ich schreibe gerade ein c Programm in Rust um.
Dabei hatte ich probleme mit einer Assertion, welche ich aber mittlerweile gelöst habe.
Geblieben ist aber meine Verwunderung über das folgende Debug Ergebnis.
Warum bekomme ich in der c Version nur dann das richtige Ergebnis ausgegeben, wenn ich den laut compiler falschen Datentyp ausgebe?
Ganz offensichtlich ist das vom compiler gewünschte Ergebnis falsch, es fehlt die letzte Stelle.
2 um x Einheiten nach links geschoben kann ja schlecht ungerade werden.
C
Rust
Dabei hatte ich probleme mit einer Assertion, welche ich aber mittlerweile gelöst habe.
Geblieben ist aber meine Verwunderung über das folgende Debug Ergebnis.
Warum bekomme ich in der c Version nur dann das richtige Ergebnis ausgegeben, wenn ich den laut compiler falschen Datentyp ausgebe?
Ganz offensichtlich ist das vom compiler gewünschte Ergebnis falsch, es fehlt die letzte Stelle.
2 um x Einheiten nach links geschoben kann ja schlecht ungerade werden.
C
C:
#define _sieve_bits_log2_ 23u
#define _sieve_span_ (2ull << _sieve_bits_log2_)
fprintf(stderr, "sp : %u", _sieve_span_); // compiler warning, unsigned int sei falscher typ, prints 1677721[B]6[/B]
fprintf(stderr, "sp : %llu", _sieve_span_); // prints 1677721
Rust
Code:
const _SIEVE_BITS_LOG2_ : u32 = 23;
pub const _SIEVE_SPAN_: u64 = 2 << _SIEVE_BITS_LOG2_;
println!("sp: {}", _SIEVE_SPAN_); // prints 1677721[B]6[/B]
Zuletzt bearbeitet: