eigtl. einfache frage zu bit-operatoren



  • Manfred Schmidtke schrieb:

    Meistens wird TRUE oder true oder was auch immer als 1 definert. Sicher ist dies aber nicht. Sicher ist nur, FALSE ist immer 0.

    Meines Wissens nach ist im C-Standard aber definiert, dass auch bei Umwandlung von bool in int für true definitiv der Wert 1 festgelegt ist.



  • achsooo ist das, vielen dank dann hab ich das jetz verstanden 🙂 also geht es bei sachen wie

    if ( x & y ) eigentlich nur dadrumm ob 0 oder etwas ungleich 0 rauskommt.

    etwas anderes was ich nicht verstehe: sagen wir alle bits sind gesetzt
    1111 1111

    damit haben wir 255. wie kommt man denn nun an zahlen groesser als 255, und wie manipuliert man die mit bit operatoren?



  • Manfred Schmidtke schrieb:

    Meistens wird TRUE oder true oder was auch immer als 1 definert. Sicher ist dies aber nicht. Sicher ist nur, FALSE ist immer 0.

    in C99 gibt es den Datentyp bool garnicht 😉
    somit gibt es auch kein true oder false, wenn man es sich nicht selbst definiert

    ein true in C++ entspricht immer dem int Wert 1 - steht so zuminderst im Standard C++98



  • Manfred Schmidtke schrieb:

    C definiert FALSE als 0 und TRUE als !0. [...] Meistens wird TRUE oder true oder was auch immer als 1 definert. Sicher ist dies aber nicht.

    Nein. Erstmal kennt C weder FALSE noch TRUE, sondern nur false und true.

    masterofx32 schrieb:

    Wenn ein boolescher Ausdruck erwartet wird, so wird in C die 0 als false und alle anderen Zahlen als true interpretiert.

    ist dabei die eine Seite. Wird ein boolscher Ausdruck jedoch als Quelle für die Zuweisung an einen anderen integralen Wert benutzt, so evaluiert false zu 0 und true zu 1.

    blubb schrieb:

    also geht es bei sachen wie

    if ( x & y ) eigentlich nur dadrumm ob 0 oder etwas ungleich 0 rauskommt.

    Yep, genauso ist das.

    blubb schrieb:

    etwas anderes was ich nicht verstehe: sagen wir alle bits sind gesetzt
    1111 1111

    damit haben wir 255. wie kommt man denn nun an zahlen groesser als 255, und wie manipuliert man die mit bit operatoren?

    Indem du einen Typ mit grösserem Wertebereich nimmst. Auf die Anwendung der Bitoperatoren hat das erstmal keinen Einfluss.



  • Vertexwahn schrieb:

    in C99 gibt es den Datentyp bool garnicht 😉

    Stimmt. In C99 heisst er:

    _Bool
    


  • groovemaster schrieb:

    blubb schrieb:

    etwas anderes was ich nicht verstehe: sagen wir alle bits sind gesetzt
    1111 1111

    damit haben wir 255. wie kommt man denn nun an zahlen groesser als 255, und wie manipuliert man die mit bit operatoren?

    Indem du einen Typ mit grösserem Wertebereich nimmst. Auf die Anwendung der Bitoperatoren hat das erstmal keinen Einfluss.

    also hat char, da es nur 1 byte gross ist, nur einen wertebereich bis maximal 255? o_O

    ein int ist ja 4 bytes gross, wie wird das denn dargestellt?
    00000000 00000000 00000000 00000000 <- das ist sind dann 4 bytes = ein int?

    kennt ihr vielleicht ein tutorial/gutes buch was solche kentnisse vielleicht mit hinsicht auf c vermittelt, wie ihr seht haperts da bei mir ; )



  • das sagt C99 zum Thema bool:

    7.16 Boolean type and values <stdbool.h>

    The header <stdbool.h> defines four macros.

    The macro
    bool
    expands to _Bool.

    The remaining three macros are suitable for use in #if preprocessing directives. They are

    true
    which expands to the integer constant 1,

    false
    which expands to the integer constant 0, and

    _ _bool_true_false_are_defined
    which expands to the integer constant 1.

    Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then redefine the macros bool, true, and false.213)



  • kennt ihr vielleicht ein tutorial/gutes buch was solche kentnisse vielleicht mit hinsicht auf c vermittelt, wie ihr seht haperts da bei mir ; )
    

    da hab ich tatsächlich ein Buch für dich: http://courses.iicm.edu/the_c_book/SoftwareentwicklungInC.pdf

    siehe 5.4 Bitoperationen



  • Vertexwahn schrieb:

    in C99 gibt es den Datentyp bool garnicht 😉
    somit gibt es auch kein true oder false, wenn man es sich nicht selbst definiert

    Falsch. In C99 gibt es schon einen boolschen Datentyp ➡ _Bool. Dieser ist aber nicht direkt zu verwenden, sondern über <stdbool.h> wird er zu bool (wie in C++). Dort findet man übrigens auch false und true, die allerdings Makros sind und nicht wie in C++ echte Literale (bzw. Schlüsselworte).

    edit:
    Oh mann, viel zu spät.



  • blubb schrieb:

    also hat char, da es nur 1 byte gross ist, nur einen wertebereich bis maximal 255? o_O

    Nein. ein char hat den Wertebereich von -128 bis +127.
    Ein unsigned char geht von 0 bis 255.

    blubb schrieb:

    ein int ist ja 4 bytes gross, wie wird das denn dargestellt?
    00000000 00000000 00000000 00000000 <- das ist sind dann 4 bytes = ein int?

    Ein int ist nicht zwangsläufig 4 Bytes groß. Das hängt von der Implementation ab. Auf 32-Bit Systemen ist es allerdings tatsächlich 4 Bytes groß.

    blubb schrieb:

    kennt ihr vielleicht ein tutorial/gutes buch was solche kentnisse vielleicht mit hinsicht auf c vermittelt, wie ihr seht haperts da bei mir ; )

    http://www.pronix.de/modules/C/openbook/
    Hab's zwar selbst nie ganz gelesen, aber alles was ich gelesen habe war gut erklärt.



  • @groovemaster:

    du bist einfach zu langsam 😃



  • TactX schrieb:

    Nein. ein char hat den Wertebereich von -128 bis +127.
    Ein unsigned char geht von 0 bis 255.

    in C++98 seihts so aus: es ist nicht sicher ob ein char unsigend oder signed ist - was sagt da C99 dazu (ich glaube das selbe - womit die interne Bitstellung dann anders als Wert interpretiert wird)?



  • TactX schrieb:

    Nein. ein char hat den Wertebereich von -128 bis +127.

    Nope. Zum einen hängt das von der Grösse eines chars ab. Und zweitens sind char, signed char und unsigned char 3 unterschiedliche Typen. char kann je nach Implementation entweder signed oder unsigned sein.



  • @TactX
    achso, ja stimmt mit den char/unsigned char, macht ja sinn : ) und da ich nur auf x86 arbeite is mir das ladde 😉 wo ist denn ein int nicht 4 byte gross? schon auf ia64 oder auch auf ppc oder so

    wg dem buch: ja in dem buch sind zwar pointer unglaublich gut erklaert, aber die bit operatoren kommen dort vieel zu kurz, das kann man sich schenken

    @Vertexwahn
    vielen dank, hab ma angefangen zu lesen, ist ja sehr ausfuerhlich und gut geschrieben, und vielleicht wird da auch direkt meine naechsten fragen wg flags beantwortet 😃
    thx :>



  • Vertexwahn schrieb:

    in C++98 seihts so aus: es ist nicht sicher ob ein char unsigend oder signed ist - was sagt da C99 dazu (ich glaube das selbe - womit die interne Bitstellung dann anders als Wert interpretiert wird)?

    c99 schrieb:

    The three types char, signed char and unsigned char are collectively called the character types. The implementation shall define char to have the same range, representation and behavior as either signed char or unsigned char.[35]

    [35]CHAR_MIN, defined in <limits.h>, will have one of the values 0 or SCHAR_MIN, and this can be used to distinguish the two options. Irrespectively of the choice made, char is a separate type from the other two and is not compatible with either.



  • blubb schrieb:

    und da ich nur auf x86 arbeite is mir das ladde 😉 wo ist denn ein int nicht 4 byte gross?

    ZB unter DOS (16 Bit). 🙂



  • groovemaster schrieb:

    Und zweitens sind char, signed char und unsigned char 3 unterschiedliche Typen. char kann je nach Implementation entweder signed oder unsigned sein.

    Man lernt nie aus 😉


Anmelden zum Antworten