Char vergleich Problem



  • Danke für alle Antworten.

    Das Problem das wir hier auch haben ist das ein Byte nicht immer 8 bit gross ist ect ect ect... aber ich würde schon gerne auf den C++ standard bauen, C finde ich auch gut, wer jedoch OO gelernt hat und von der Java Seite kommt braucht Polymorphismus ect...



  • Heimelchen schrieb:

    supertux schrieb:

    printf("C%s\n", sizeof(char) == sizeof('a') ? "++" : "");
    

    Beleuchtet dieses Beispiel vielleicht eher eine Eigenart eines Compilers als die Unterschiede zwischen C und C++?

    Beides, aber in erster Linie den Sprachunterschied. 'a' ist in C int, in C++ char. sizeof(char)==sizeof('a') gilt also, wenn es C++ ist oder wenn sizeof(int)==1 ist, wobei letzteres eher selten der Fall sein dürfte.



  • Bashar schrieb:

    'a' ist in C int, in C++ char.

    Das will ich doch schwer bezweifeln.



  • Du willst, aber du bringst es nicht übers Herz? Oder wie soll ich das verstehen? Nachlesen darfst du das aber gerne selbst 🙂



  • In meinen Büchern steht davon nix. Würd mich auch wundern, programmiere ich in meinen Controller ein int, belegt das zwei Byte, ein char dagegen nur eins. Zwar kann man zwei in eins stecken, aber gleich sind sie deswegen noch lange nicht.
    Guck doch mal bei deinem Compiler nach dem Charset und stell ihn auf ASCII, dann wird aus deinem "int" ganz schnell ein char.



  • Heimelchen schrieb:

    In meinen Büchern steht davon nix.

    Aha. Das soll mir was sagen? Deine Bücher und dein Compiler tun hier überhaupt nichts zur Sache (wobei ich bezweifle, dass du tatsächlich irgendwo gefunden hast, dass eine Zeichenkonstante den Typ char haben muss; und erst recht hast du nicht ausprobiert, ob sizeof('a') vielleicht ungleich 1 sein könnte). Solche Fragen kann man sich beantworten, indem man die Sprachdefinition von C im ANSI-C-Standard nachliest.



  • Genau. Und bei mir ist sizeof('a')==1. Ich programmiere aber auch nicht nur unter VisualStudio und nicht nur für PC. Und wenn ich in meinen ICE gucke, steht im EEPROM an der Stelle von 'a' ein Byte. Wahnsinn!



  • Macht sich da kognitive Dissonanz breit? Du hast mein Argument überhaupt nicht zur Kenntnis genommen.

    Bleib halt dumm, mir doch egal 🙂



  • *gähn*


  • Mod

    Um mal der Dummheit entgegen zu wirken, hier der ANSI C Standard. Er ist sehr klar formuliert:

    ISO 9899 TC2 6.4.4.4:2 schrieb:

    An integer character constant is a sequence of one or more multibyte characters enclosed in single-quotes, as in 'x'. A wide character constant is the same, except prefixed by the letter L. With a few exceptions detailed later, the elements of the sequence are any members of the source character set; they are mapped in an implementation-defined manner to members of the execution character set.

    ...

    ISO 9899 TC2 6.4.4.4:10 schrieb:

    An integer character constant has type int. The value of an integer character constant containing a single character that maps to a single-byte execution character is the numerical value of the representation of the mapped character interpreted as an integer. The value of an integer character constant containing more than one character (e.g., 'ab'), or containing a character or escape sequence that does not map to a single-byte execution character, is implementation-defined. If an integer character constant contains a single character or escape sequence, its value is the one that results when an object with type char whose value is that of the single character or escape sequence is converted to type int.

    Hervorhebung durch mich.



  • Hallo Zusammen,

    Also vom Proggen in C++ habe ich nur mässig Ahnung aber wen Ihr euch hier schon die Klatsche gebt , dann bitte ich um Richtigstellung

    Es ist ganz klar das man in 1 Byte (8bit) 255 werte darstellen kann, dem entsprechend muss das Charset ASCII sein dann passt das in 1 Byte.

    Wenn das Charset Unicode(UTF-8) ist dann braucht man 4 Byte also 1 Int,

    Das andere Geplänkel das Ihr hier habt ist schwer zu beurteilen.

    Gem. Wikipedia

    Ein Integer besteht in der Regel aus 8, 16, 32, 64 oder 128 Bits (also 1, 2, 4, 8 oder 16 Bytes) – entsprechend der Wortbreite der jeweiligen CPU

    Also kann man sagen das 1 Byte auch 1 Integer sein kann unter diesen Umständen. Im Technischen Bereich würde ich aber eine Einheit von 1 Byte nie Integer nennen, für mich ist dass das gleiche wie 1 Char nur ist die Repräsentation von einem 1 Byte Char in ASCII und einem 4 Byte Int in Unicode




Anmelden zum Antworten