2016-09-05 12 views
5

Właśnie zadał to pytanie What is the reason for the double negation -(-n)? gdzie odpowiadającego wspomina w komentarzu, żeDlaczego char a = 65 mniej mobilny niż char a = 'a'

char a = 'A';

jest bardziej mobilny niż

char a = 65;

Dlaczego tak jest? Z pewnością są dokładnie takie same?

+6

Ponieważ nie wszystkie systemy używają ASCII. Wciąż pracują systemy, które używają np. [EBCDIC] (https://en.wikipedia.org/wiki/EBCDIC), gdzie 'A' nie jest równe' 65'. –

+2

Nie rozumiem zaniedbania. Czy mógłbyś wyjaśnić, dlaczego jest to złe pytanie? Nie rozumiem. –

+0

Co powiesz na proste wyszukiwanie "kodowania znaków C"? – Olaf

Odpowiedz

5

A jest reprezentowany przez 65 w ASCII; ale to nie znaczy, że każdy system postać reprezentuje ją przez 65.

Jeśli piszesz

char a = 65; 

to jesteś niejawnie zakładając, że system będzie używać ASCII. Jest to mniej przenośne niż pisanie, co nie powoduje takiego założenia.

+0

To urocze wyjaśnienie. Przegrałem, zanim straciłem przywilej ;-) –

2

65 to kod ASCII dla A, który może działać na wielu systemach, ale co jeśli system nie obsługuje ASCII lub nie ma 65 dla A? Jeśli tak się stanie, to jest mniej przenośny ze względu na zależność od systemu.

char a = 'A'; 

jest char dosłowne, które będą działać na wszystkich systemach, ale:

char a = 65; 

jest ASCII i może nie działać na wszystkich systemach. Zasadniczo zależy to od faktu, że użytkownik używa ASCII, a w zależności od użytkownika nigdy nie jest niezawodny.

+0

Wielkie dzięki za to. Przegłosowałem, póki jeszcze mogę! –

1

Jeśli zmienna a należy przechowywać litery „A”, to lepiej pisać

char a = 'A'; 

ponieważ jest bardziej mobilny, ponieważ mogą istnieć inne kodowanie znaków niż ASCII, ale również dlatego, że jest bardziej przejrzyste dla czytelnika, że ​​a przechowuje literę "A".

przeciwnym razie jest jeszcze bardziej oczywiste: Nikt nie będzie kiedykolwiek napisać

int a = 'A'; 

gdy a powinien posiadać wartość „65” dla obliczeń.