Pour que la fonction renvoie vrai il faut que "c & 0x80" et "~c & 0x40" soit différent de zero.
Pour que "c & 0x80" != 0 il faut "c>=0x80" car en binaire:
0x80 = 10000000b et donc il faut que "c" ait au moins le 1er bit à 1, donc "c>=0x80".
Pour que "~c & 0x40" != 0 il faut que le 2e bit de "~c" vale 1 car en binaire:
0x40 = 01000000b et donc que le 2e bit de "c" vale 0.
Donc ceci filtre tout les nombres ayant le 1er bit à un et le deuxième à 0:
"10000000b <= c <= 10111111b"
"0x80 <= c <= 0xBF"
Ce qui garde les caractères minuscules car ils commencent à 0x81 tout en ne prenant pas les majuscules non accentuées qui commencent à 0xC1:
http://fr.wikipedia.org/wiki/EBCDIC
Donc tout dépend de si il faut considérer les majuscules accentuées comme des majuscules.
Partager