eigtl. einfache frage zu bit-operatoren
-
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 1111damit 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 1111damit 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 definiertFalsch. 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.
-
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 laddewo 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