Bits einzeln setzen und löschen
-
#define _BV(x) (1<<(x))
#define bit_is_set(value, n) ((value) & _BV(n))
#define bit_is_cleared(value, n) (!(bit_is_set((value), (n)))
#define bit_set(value, n) ((value) | _BV(n))
#define bit_clear(value, n) ((value) & ~_BV(n))
-
der mit dem avr tanzt schrieb:
#define bit_is_set(value, n) ((value) & _BV(n))
#define bit_is_set(value, n) !!((value) & _BV(n))
-
der mit dem bool tanzt schrieb:
der mit dem avr tanzt schrieb:
#define bit_is_set(value, n) ((value) & _BV(n))
#define bit_is_set(value, n) !!((value) & _BV(n))
Dann macht mir mein Compiler aus allen Werten eine 1. Das will ich nicht, so kostet das jedes mal wertvollen Flash-Speicher für das Programm!
-
der mit flasharmut schrieb:
der mit dem bool tanzt schrieb:
der mit dem avr tanzt schrieb:
#define bit_is_set(value, n) ((value) & _BV(n))
#define bit_is_set(value, n) !!((value) & _BV(n))
Dann macht mir mein Compiler aus allen Werten eine 1. Das will ich nicht, so kostet das jedes mal wertvollen Flash-Speicher für das Programm!
Mein Compiler kann optimieren, deiner nicht?
-
der mit dem megacompiler schrieb:
der mit flasharmut schrieb:
der mit dem bool tanzt schrieb:
der mit dem avr tanzt schrieb:
#define bit_is_set(value, n) ((value) & _BV(n))
#define bit_is_set(value, n) !!((value) & _BV(n))
Dann macht mir mein Compiler aus allen Werten eine 1. Das will ich nicht, so kostet das jedes mal wertvollen Flash-Speicher für das Programm!
Mein Compiler kann optimieren, deiner nicht?
Keine Ahnung mein avr-gcc erzeugt mit den zwei Negationsoperatoren auf jeden Fall eine größere Binärdatei, und die Semantik ist ja wohl gleich - außer jemand schreibt bit_is_set(byte, 0) == 1, aber das tu ich nie.
-
der dens net intressiert schrieb:
der mit dem megacompiler schrieb:
der mit flasharmut schrieb:
der mit dem bool tanzt schrieb:
der mit dem avr tanzt schrieb:
#define bit_is_set(value, n) ((value) & _BV(n))
#define bit_is_set(value, n) !!((value) & _BV(n))
Dann macht mir mein Compiler aus allen Werten eine 1. Das will ich nicht, so kostet das jedes mal wertvollen Flash-Speicher für das Programm!
Mein Compiler kann optimieren, deiner nicht?
Keine Ahnung mein avr-gcc erzeugt mit den zwei Negationsoperatoren auf jeden Fall eine größere Binärdatei, und die Semantik ist ja wohl gleich - außer jemand schreibt bit_is_set(byte, 0) == 1, aber das tu ich nie.
Dreckige Lüge!!
$ cat test-avr.c volatile char* p = (char*)0xABC; // nicht wegoptimieren #define _BV(x) (1 << (x)) #if defined(NEG) #define bit_is_set(value, n) !!((value) & _BV(n)) #else #define bit_is_set(value, n) ((value) & _BV(n)) #endif int main() { char c = *p; if(bit_is_set(c, 4)) *p = 0xAA; // damit if nicht wegoptimiert } $ avr-gcc test-avr.c -Os -o test1.hex $ avr-gcc test-avr.c -DNEG -Os -o test2.hex $ stat -f "%z %N" test*.hex 3091 test1.hex 3091 test2.hex
-
der entlarver schrieb:
der dens net intressiert schrieb:
der mit dem megacompiler schrieb:
der mit flasharmut schrieb:
der mit dem bool tanzt schrieb:
der mit dem avr tanzt schrieb:
#define bit_is_set(value, n) ((value) & _BV(n))
#define bit_is_set(value, n) !!((value) & _BV(n))
Dann macht mir mein Compiler aus allen Werten eine 1. Das will ich nicht, so kostet das jedes mal wertvollen Flash-Speicher für das Programm!
Mein Compiler kann optimieren, deiner nicht?
Keine Ahnung mein avr-gcc erzeugt mit den zwei Negationsoperatoren auf jeden Fall eine größere Binärdatei, und die Semantik ist ja wohl gleich - außer jemand schreibt bit_is_set(byte, 0) == 1, aber das tu ich nie.
Dreckige Lüge!!
$ cat test-avr.c volatile char* p = (char*)0xABC; // nicht wegoptimieren #define _BV(x) (1 << (x)) #if defined(NEG) #define bit_is_set(value, n) !!((value) & _BV(n)) #else #define bit_is_set(value, n) ((value) & _BV(n)) #endif int main() { char c = *p; if(bit_is_set(c, 4)) *p = 0xAA; // damit if nicht wegoptimiert } $ avr-gcc test-avr.c -Os -o test1.hex $ avr-gcc test-avr.c -DNEG -Os -o test2.hex $ stat -f "%z %N" test*.hex 3091 test1.hex 3091 test2.hex
Verdammt ich hatte unrecht. Ich würde dir gerne meine Tastatur als Zeichen meiner Unterlegen überreichen.
-
Reduziert eure quotes bitte auf das notwendige. Die restlichen Müllbeiträge hab ich weggelöscht.
PS: lowercase-Macros...
-
was ist BV?
cu
-
ratte schrieb:
was ist BV?
'besloten vennootschap', eine holländische gesellschaftsform, vergleichbar mit 'ner GmbH in deutschland.
ne, im ernst, guck mal oben. das ist ein makro (1<<(x))
-
jap schon gesehen;)
unsigned int reg = 4; if(bit_is_set(reg, 3))
bit3 ist nicht gesetzt? hmmm
-
ratte schrieb:
bit3 ist nicht gesetzt? hmmm
richtig. 2^3 ist 8, nicht 4
-
meinte bit2;)
ist aber auch nicht gesetzt;/
4 = 100
-
das geht nicht, warum? errorcode ist danach noch immer 0
unsigned int errorcode = 0; unsigned int reg = 4; if(bit_is_set(reg, 2)) { bit_set(errorcode, 6); }
-
das makro wird gar nicht ausgeführt...hrrr