unsigned fehler



  • Hallo Allerseits!

    Ich habe in meinen Programm ein Problem dass sicher an den unsigned ints liegt allerdings komme ich nicht drauf!(ich brauche die 4Byte des ints unbedingt, aber mit long long will ich nicht arbeiten).

    Also wenn ich so eine Zuweißung mache, dürfte alles richtig sein oder?

    unsigned int variable1 = variable2 + variable2;
    

    Ich hab's auch so probiert:

    unsigned int variable1 = (unsigned int)(variable2 + variable3);
    

    Daran liegt es nicht oder?
    Kann mir sonst jemand vielleicht aus Erfahrung helfen, das Problem tritt immer auf wenn dass erste Bit (von links gesehen, also das bei normalen ints das Vorzeichen angibt) gesetzt ist.

    Dankeschön schon mal und Tschüss



  • variable2 und variable3 sollten, wenn sie 'signed' sind, nicht negativ sein. sind sie negativ, dann darfst du nicht in 'unsigned' casten, sonst bekommst du irre hohe werte. wenn's trotzdem einen überlauf gibt, dann musst du für das ergebnis, wohl oder übel, den nächst breiteren typ nehmen.
    🙂



  • klingt so, als würd deine variable schlicht überlaufen. so große zahlen, dass sie ein unsigned int/long zum überlaufen bringen, sind in den seltensten fällen wirklich notwendig. zumindest in ganzzahlaritmethik. wenn du wirklich so große zahlen brauchst, dann wirst du nicht drumherum kommen, dich einer speziellen lib für solche aufgaben zu bedienen.



  • Die Zahl selber interessiert mich eigentlich wenig, ich brauche die 4*8Bits um 1er und 0er zu speichern, da brauch ich nicht den nächsthöheren Zahlentyp (long long oder auch int64), sondern ein unsigned int reicht mir!

    Die Fehler die ihr mir genannt habt (DANKE übrigens) waren mir bereits klar, aber an denen liegt es sicher nicht!



  • HE schrieb:

    Die Zahl selber interessiert mich eigentlich wenig, ich brauche die 4*8Bits um 1er und 0er zu speichern, da brauch ich nicht den nächsthöheren Zahlentyp (long long oder auch int64), sondern ein unsigned int reicht mir!

    Die Fehler die ihr mir genannt habt (DANKE übrigens) waren mir bereits klar, aber an denen liegt es sicher nicht!

    Wäre da nicht std::bitset recht praktisch? Oo



  • Was sind denn das für Werte? Flags?



  • Nein in meinem Fall nicht, ich brauche 24 Bits die mit "normalen" Additionen und Multiplikationen gebildet werden. Ich komme nicht darum herum, deshalb mein Problem...

    Nein eigentlich keine Flags, sie ergeben insgesamt und einzeln ein Information



  • ok ich hab den Fehler gefunden, danke euch für die Hilfe!

    Das Problem ist dass der Compiler alle Variablen als signed interpretiert auch wenn sie unsigned sind, also muss man casten casten casten, und ich habe leider vergessen ein int zu casten!daher der Fehler

    Danke und tschüss



  • HE schrieb:

    Das Problem ist dass der Compiler alle Variablen als signed interpretiert auch wenn sie unsigned sind

    schlechter compiler. ab in die tonne damit!
    🙂



  • HE schrieb:

    ok ich hab den Fehler gefunden, danke euch für die Hilfe!

    Hilfe?! Es spekulieren doch nur alle wild herum, weil du weder das Problem beschreibst, noch Source-Code postest, mit dem sich was anfangen lässt.

    HE schrieb:

    Das Problem ist dass der Compiler alle Variablen als signed interpretiert auch wenn sie unsigned sind, also muss man casten casten casten, und ich habe leider vergessen ein int zu casten!daher der Fehler

    Sorry, aber das ist doch dummes Zeug.



  • @ Undertaker
    Naja schlechter Compiler würde ich nicht sagen, es ist der gcc unter Dev-C++ (empfehlenswert!)

    @2am
    Also der Quelltext wäre ein wenig gewaltig geworden, sind doch einige Programmzeilchen, aber egal gelöst ist es ja jetzt. Danke an alle.



  • HE schrieb:

    @ Undertaker
    Naja schlechter Compiler würde ich nicht sagen, es ist der gcc unter Dev-C++ (empfehlenswert!)

    Dann hat 2am recht: das ist dummes Zeugs.



  • Bo was soll ich sagen?
    Ohne casten -> problem
    Mit casten -> kein problem

    kann also nur am casten liegen.



  • Dass der gcc kein unsigned Variablen als signed interpretiert ist in der Tat dummes Zeug. Vermutlich hast Du irgendwo ein u-Suffix vergessen. Aber ohne nachvollziehbares Codebeispiel raten wir weiter rum, und Du glaubst weiterhin der Compiler wäre fehlerhaft 😉



  • HE schrieb:

    kann also nur am casten liegen.

    Falsch. Es kann und wird an einen Fehler in deinen Code liegen. Der GCC hat zumindest kein Problem mit unsigned/signed.

    Wenn du mit Zahlenliteralen arbeitest kann ich mir sehr gut vorstellen wo der Fehler liegt...

    10 => int
    10l => long
    10ul => unsigned long
    ...

    cu André



  • das ist ja das komische, ich arbeite nie mit zahlen, das problem kam bei rechnungen mit zwei unsigned variablen auf wo das ergebnis in die dritte unsigned variable übertragen wurde.

    Wenn ihr wollt such ich das programmfragment nochmal heraus



  • Das waere doch mal was. Lass uns teilhaben an dem von dir gefundenen Compilerfehler bzw. gib uns die Moeglichkeit dir deinen Fehler zu zeigen, je nachdem was zutrifft 😉


Anmelden zum Antworten