Bitverschiebung
-
Ein Integer hat mindestens 16 Bit. Alles darüber kanns aber auch sein
Falls man also eine bestimmte Bitlänge braucht, sollte man stdint.h benutzen und daraus z.B. uint32_t für einen unsigned 32 Bit Wert.
-
Genmutant schrieb:
Ein Integer hat mindestens 16 Bit. Alles darüber kanns aber auch sein
hm? kann man nicht wenn man ein programm für eine 8 bit cpu macht auch int schreiben? dachte immer ein int beschreibt die am schnellsten verarbeitbare einheit einer cpu
-
Doch, auch auf einem Mikrocontroller mit 8Bit compiled dir der gcc int mit 16Bit. Es gibt allerdings einen Compiler-Switch um int mit 8Bit zu belegen. Das ist allerdings nicht Standardkonform und daher ist es möglich dass Standardfunktionen nicht mehr funktionieren, die ein int mit mindestens 16Bit erwarten.
-
es steht doch nirgends das ein int min 16 bit hat wie kommst du darauf?
-
Doch im Standard stehts :xmas1:
Im C99 Standard z.B. unter: 5.2.4.2.1 Sizes of integer types
-
oh das steht ja schon auf seite 22
danke, wieder eine unklarheit beseitigt hab mir jetzt auch mal den standard besorgt
-
da steht aber auch maximum value for an object of type int +32767
und UINT_MIN gibts schon mal garnicht...sollt ich doch mal meinen compiler schimpfen das der nicht nach standard arbeitet
-
Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
Für signed int muss also mindestens der Bereich von -32767 bis +32767 abgedeckt sein. Mehr geht aber auch.
UINT_MIN wäre demnach 0.
-
ok ich gebe mich geschlagen
-
Genmutant schrieb:
UINT_MIN wäre demnach 0.
Da hätte man fast selber drauf kommen können
-
nwp2 schrieb:
Genmutant schrieb:
UINT_MIN wäre demnach 0.
Da hätte man fast selber drauf kommen können
also wenn dann UINT_MIN = 1
-
Jetzt sag bloß du kannst mit einem Unsigned Int keine 0 darstellen ^^
-
ach ich war gerade auf min 1bit und hab das dann so hingeschrieben, ohne weiter nach zu denken
-
Kannst du machen konkret Bitinfo für dein System(mehr oder weniger sinnfrei :D):
#include <stdio.h> #include <limits.h> // CHAR_BIT enum Type { CHAR, INT, LONG, FLOAT, DOUBLE }; int bit_info ( enum Type type ) { int nBits = -1; switch (type) { case CHAR: nBits = sizeof(char); break; case INT: nBits = sizeof(int); break; case LONG: nBits = sizeof(long); break; case FLOAT: nBits = sizeof(float); break; case DOUBLE: nBits = sizeof(double); break; default: puts("I don't know!"); } return nBits*CHAR_BIT; } int main() { printf("char: %d\n" "int: %d\n" "long: %d\n" "float: %d\n" "double: %d\n", bit_info (CHAR), bit_info (INT), bit_info (LONG), bit_info (FLOAT), bit_info (DOUBLE)); return 0; }
-
Big Brother schrieb:
(mehr oder weniger sinnfrei :D):
in der tat: *#define BITINFO(type) (sizeof(type)CHAR_BIT)