[C++]Wypisanie litery o największej liczbie powtórzeń

abc666

[C++]Wypisanie litery o największej liczbie powtórzeń

Post autor: abc666 »

ksisquare pisze:** ale kody wcale nie muszą być nieujemne
To stwierdzenie jest strasznie głupie. To czy dana liczba zapisana binarnie jest ujemna czy nie zależy tylko i wyłącznie od interpretacji. Kody znaków są z założenia nieujemne.

A twoje nerwy wzięły się pewnie z zrzutowania na jakiś za mały typ ze znakiem i ci się przekręciło.
ksisquare
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 1 cze 2012, o 07:04
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 15 razy

[C++]Wypisanie litery o największej liczbie powtórzeń

Post autor: ksisquare »

abc666 pisze:To stwierdzenie jest strasznie głupie. To czy dana liczba zapisana binarnie jest ujemna czy nie zależy tylko i wyłącznie od interpretacji. Kody znaków są z założenia nieujemne.
A twoje nerwy wzięły się pewnie z zrzutowania na jakiś za mały typ ze znakiem i ci się przekręciło.
tu przykład rzutowania na mały, trzydziestodwubitowy typ int

Kod: Zaznacz cały

char znak;
int tablica[256];
...
        tablica[znak]++;

Kod: Zaznacz cały

#include <stdio.h>
#include <limits.h>
 
int main(void) {
        printf("%d", CHAR_MIN);
        return 0;
}
C99 strict (gcc-4.3.4) -128
C (gcc-4.3.4) -128
C++ (gcc-4.3.4) -128
C++0x (gcc-4.5.1) -128
To się nazywa "silny dowód eksperymentalny".
abc666

[C++]Wypisanie litery o największej liczbie powtórzeń

Post autor: abc666 »

ksisquare, ale przecież ty mówisz o całkowicie czymś innym. Pokazujesz, że typ char jest ze znakiem, a tutaj mówimy o czymś całkowicie innym. Mówimy tutaj o kodach znaków, które są z założenia nieujemne. Zresztą to co pokazujesz potwierdza to co napisałem wyżej o zbyt małym typie (albo dokładniej źle dobranym typie) niż jest potrzebny.

Jeśli dalej nie chcesz się przekonać to odpowiedz mi czy liczba 10101010 jest ujemna czy dodatnia.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++]Wypisanie litery o największej liczbie powtórzeń

Post autor: Afish »

A ja przytoczę fragment ze standardu:
An object declared as type char is large enough to store any member of the basic execution character set. If a member of the basic execution character set is stored in a char object, its value is guaranteed to be nonnegative
I przy okazji proponuję wydzielić tę dyskusję do innego wątku, bo zrobiliśmy dość spory offtop.
ksisquare
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 1 cze 2012, o 07:04
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 15 razy

[C++]Wypisanie litery o największej liczbie powtórzeń

Post autor: ksisquare »

abc666 10101010 binarnie to może być kod instrukcji mikroprocesora Z80 wykonującej różnicę symetryczną akumulatora i rejestru D (XOR D),
albo literka 'Z', albo...

Afish a dalej "If any other character is stored in a char object, the resulting value is implementation-defined"

a zaczęło się, bo zachciało mi się przypomnieć o tym, że char, unsigned char i signed char to trzy różne typy
i trzeba uważać by nie zwichnąć sobie czegoś for(unsigned int i=2; i>=0; i--) putchar('.');
abc666

[C++]Wypisanie litery o największej liczbie powtórzeń

Post autor: abc666 »

ksisquare pisze:abc666 10101010 binarnie to może być kod instrukcji mikroprocesora Z80 wykonującej różnicę symetryczną akumulatora i rejestru D (XOR D),
albo literka 'Z', albo...
No właśnie.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++]Wypisanie litery o największej liczbie powtórzeń

Post autor: Afish »

ksisquare pisze: Afish a dalej "If any other character is stored in a char object, the resulting value is implementation-defined"
Dochodzisz do sedna. Teraz tylko poczytaj od ASCII, literce Ą oraz stronach kodowych i wreszcie wszystko stanie się jasne.
ODPOWIEDZ