Maximal/Minimal Int



  • spjoe schrieb:

    #define INTMAX ((int)(~0U>>1))
    #define INTMIN  (-INTMAX -1)
    

    Was bedeutet dieses "~0U>>1"? 😕 Das habe ich noch nie gesehen!

    mfg



  • terraner schrieb:

    spjoe schrieb:

    #define INTMAX ((int)(~0U>>1))
    #define INTMIN  (-INTMAX -1)
    

    Was bedeutet dieses "~0U>>1"? 😕 Das habe ich noch nie gesehen!

    mfg

    es bedeuted du hast einen unsigned integer (ohne vorzeichen) mit dem wert 0 den du invertierts (also die Wertigkeit aller bits umdrehst) und um eine Stelle nach rechts schiftest
    ist etwas verwirrend auf den ersten Blick, linux code halt



  • Danke!
    Gibt es noch mehr solcher Anweisungen und wenn ja, wo finde ich so etwas wie eine Referenz? Ich habe zwar schon nach "preprocessor commands" und "preprocessor c++" gesucht, aber nichts gefunden.

    mfg



  • Du solltest nach "Bit Operationen" suchen.



  • Merci!

    mfg



  • @spoje:
    Konstruktive Kritik:

    Dein Code ist Platformabhängig, und funktioniert nur bei "üblicher" Darstellung von signed int im Zeierkomplement. Das ist vom Standard nicht garantiert. (Einerkomplement ist zwar nicht sehr sinnvoll und Bias nicht sehr verbreitet, aber es hat schon seltsameres einen C-Compielr gesehen)

    limits.h / std::limits sind ja grad dazu da, diese Platformabhängigkeit zu isolieren. Insofern dürfen Standardheader total unportabel sein 🙂



  • peterchen schrieb:

    Insofern dürfen Standardheader total unportabel sein 🙂

    Nein. Sie sollen sogar!



  • peterchen schrieb:

    @spoje:
    Konstruktive Kritik:

    Dein Code ist Platformabhängig, und funktioniert nur bei "üblicher" Darstellung von signed int im Zweierkomplement. Das ist vom Standard nicht garantiert.

    ich wuesste nicht was daran platformabhängig ist..
    ürigens dieser code ist in der kernel.h von linux definiert



  • Ähm nur mal so ne Frage 😕

    Wenn man den kleinsten und grössten Wert wissen will, kann man soch auch sifeof nehmen. Dann hätte man mit if oder ner switch anweisung ja dann die werte

    lol, was auch gehen müsste, sind 2 for schleifen ( für ganz hartgesockene )

    int i = 0 und dann int x = 0
    jetzt solange i++ solange i grösser ist als x
    sobald i kleiner ist, einfach i--
    und dann int_max = i zuweisen



  • wtf?



  • newkid schrieb:

    lol, was auch gehen müsste, sind 2 for schleifen ( für ganz hartgesockene )

    int i = 0 und dann int x = 0
    jetzt solange i++ solange i grösser ist als x
    sobald i kleiner ist, einfach i--
    und dann int_max = i zuweisen

    i++ solange i groesser x ist ... i = 0, x = 0 🙄



  • er meint sowas:

    int i=0;
    for(int x=0;x>=i;++x){
        i=x;
    }
    

    ist aber nich grad schön.



  • ich wuesste nicht was daran platformabhängig ist..
    ürigens dieser code ist in der kernel.h von linux definiert

    interne darstellung negativer Zahlen:
    - Einerkomplement
    - mit Bias
    - niederwertiges Bit
    - Trits (3-state-bits)

    (bin mir nicht bei allen 100% sicher, obs vielleicht doch klappt.)

    Zweierkomplement (für das obiger Code funktioniert) ist aus verschiedenen Gründen gängig.



  • otze schrieb:

    er meint sowas:

    ist aber nich grad schön.

    jep genau so was mein ich

    jep sagte ja auch fuer "hartgesockene" ( d.h. nicht grad zu emp. )

    und wie ist das mit dem sizeof? denn rückgabe sind ja byte und dann mit switch ausrechnen? ( das war der ernstgemeinte vorschlag )



  • ein Byte hat nicht auf jeder Platform 8bit (sizeof gibt byte zurück!!)

    mfg



  • ich wuesste nicht was daran platformabhängig ist..

    - mit Bias
    - Trits (3-state-bits)

    ok beit trits ist dieser code natuerlich komplett unbrauchbar

    aber koenntest du mir Bias erklaeren? habe diesen Ausdruck noch nie gehört


Anmelden zum Antworten