C Datentypen magie?

ZuseZ3

Lt. Commander
Registriert
Jan. 2014
Beiträge
1.659
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
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:
  • Gefällt mir
Reaktionen: ZuseZ3
Ich habe es gelöst, der Originale C code hatte noch zwei \b\b am Ende stehen, wobei mir nicht ganz klar ist warum man das bei Debug output möchte. Je nach Kombination hatten die daher das letzte Zeichen gelöscht.
Ich hatte nicht groß über die Bedeutung nachgedacht und sie im obigen Beispiel nicht kopiert, mein Fehler.
Damit hat sich das ganze wohl geklärt.
 
  • Gefällt mir
Reaktionen: pustekuchen91, pseudopseudonym, madmax2010 und eine weitere Person
Zurück
Oben