IAR Embedded Workbench
Ist dies ein Clone von Atmel-Studio ?
"int" ist ohnehin nicht "eindeutig", sondern Architektur- und damit Compiler-Abhängig.
Beim Integer würde ich mich mal bei Pascal verlassen, auch wen es jetzt bei FPC immer 32Bit ist.
IAR Embedded Workbench
"int" ist ohnehin nicht "eindeutig", sondern Architektur- und damit Compiler-Abhängig.
Mathias hat geschrieben:Beim Integer würde ich mich mal bei Pascal verlassen, auch wen es jetzt bei FPC immer 32Bit ist.
Elektronik Praxis hat geschrieben:char c1;
c1 = ~0x80;
if (c1 == ~0x80)
{ //wird nie erreicht}
mschnell hat geschrieben:Elektronik Praxis hat geschrieben:char c1;
c1 = ~0x80;
if (c1 == ~0x80)
{ //wird nie erreicht}
Wenn man mit 8 Bit großen Zahlen rechen will, sollte man (wie jeder C-Programmierer weis) "signed char" oder "unsigned char" verwenden, oder besser "uint8_t" oder "int8_t".
Timm Thaler hat geschrieben:Der Char c1 wird vom Compiler auf 32bit erweitert
Code: Alles auswählen
void loop() {
char c1;
c1 = ~0x80;
if (c1 == ~0x80) {
Serial.println("true");
} else {
Serial.println("false");
}
Serial.println(sizeof(c1));
}
Code: Alles auswählen
c1 = ~80;
if (c1 == ~80) {
Mathias hat geschrieben:Komisch mache ich aberCode: Alles auswählen
c1 = ~80;
if (c1 == ~80) {
dann kommt "true".
Code: Alles auswählen
char c1;
c1 = ~0x80;
if (c1 == char(~0x80)) { // oder if (c1 == 127) {
Serial.println("true");
} else {
Serial.println("false");
}
Mathias hat geschrieben:Jetzt blicke ich langsam durch, der dumme C-Compiler macht aus einem gewöhnlichen char ein Signed.
Und in der If-Abfrage, macht er ein Unsigned.
Mathias hat geschrieben:Im Arduino-Forum habe ich eine Antwort bekommen, die Konstante 0x80 implementiert C++ als Integer.