Comment les lettres majuscules et minuscules diffèrent-elles d'un seul bit?
J'ai trouvé un exemple des Données et de la Communication, de Réseautage livre écrit par Behrouza Forouzan concernant les lettres majuscules et minuscules, qui diffèrent par un seul bit dans les 7 bits de code.
Par exemple, le caractère A est 1000001 (0x41) et le caractère a est 1100001 (0x61).La différence est dans le bit 6, qui est 0, en lettres majuscules et 1 en lettres minuscules. Si nous savons que le code pour l'un des cas, nous pouvons facilement trouver le code pour les autres en ajoutant ou en soustrayant 32 en décimal, ou il nous suffit de retourner le sixième bit.
Que signifie tout cela?
Je me suis trouvé très confus avec toutes ces choses. Quelqu'un pourrait-il donner des exemples de la façon dont ces choses fonctionnent vraiment?
source d'informationauteur Vibhakar SInha
Vous devez vous connecter pour publier un commentaire.
Prenons un cas que vous trouverez plus familier: base 10.
Supposons que nous avons une base de 10 ordinateurs, où chaque 10bit stocke une valeur de 0 à 9, et un 10byte est de 5 10bit longtemps, de sorte que chaque octet peut contenir 100 000 valeurs (de 0 à 99 999 habitants).
Que vous souhaitez attribuer des lettres à des positions particulières dans un 10byte de sorte que cet ordinateur peut communiquer des données texte avec d'autres ordinateurs. Il est possible de le faire, ce serait de la sorte:
Voyez-vous que chaque lettre minuscule diffère de la lettre majuscule par un seul 10bit chiffres, dans la 3ème colonne de la droite? Il n'a pas ont être conçu de cette façon. Il était tout simplement pratique, parce que chaque fois que nous voulons régler le cas d'une lettre, il suffit simplement de modifier l'un des chiffres (10bit) sans se soucier de ce que le reste du numéro ou de la peine avec vingt-six différentes transformations quand on peut faire un. Nous n'avons pas choisi, et le deuxième chiffre, car au lieu d'être 100 à part, ils étaient seulement 10 à part et se chevauchent.
Maintenant, en base 2, c'est exactement la même, mais au lieu de chaque bit représentant de 0 à 9, il ne peut représenter que de 0-1. À l'aide de huit 2-bits ne nous donne que 256 combinaisons possibles, de 0 à 255. Les codes ASCII pour les lettres majuscules et minuscules en binaire, ressemble à ceci:
Juste le même qu'avant, ils diffèrent par un seul 2bit chiffres, ici, dans la 6ème colonne de droite. Nous ne pouvions pas avoir utilisé un chiffre plus loin vers la droite (la plus petite), parce qu'alors, les listes ont superposé (2^5 = 32 et, en conséquence, nous avons utilisé tous les bits 0 à 5, mais 2^4 = 16, ce qui pourrait ne pas couvrir les 26 lettres de l'alphabet).
Juste pour remplir les choses un peu, voici un exemple de ce que les valeurs binaires veux dire. Prenons celui de G. À comprendre ce 01000111 signifie en binaire:
Faire la même chose pour la lettre G dans la base 10 du système, j'ai construit ci-dessus:
Regarder en arrière à la "Val" ligne de binaires. Voyez-vous que, à partir de la droite, chaque valeur est le double de la précédente? En doublant à chaque fois que nous obtenons 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, et ainsi de suite. C'est de cette façon un chiffre binaire de la position détermine sa valeur, tout comme une décimale de position détermine sa valeur avec les pouvoirs de 10: 1, 10, 100, 1000, 10000, 100000, et ainsi de suite.
Je réalise que cela semble stupide, parce que je n'ai fait convertir 107 107... mais 107 n'est pas juste un nombre, c'est une forme abrégée de:
Une autre façon pour nous représenter qui est
De même, 01000111 n'est pas seulement un nombre binaire, il est une forme abrégée pour
Qui est ce que j'ai déjà vous a montré:
Aussi, vous avez peut-être vous demandez-vous à quoi
0x41
et0x61
signifiait. Le0x
partie indique que les chiffres sont à comprendre comme hexadécimal, qui est la base 16. Il y a que 10 chiffres, dans notre système, nous avons donc besoin de plus de 6 chiffres en quelque sorte. Ainsi, hexadécimal utilise les chiffres de 0 à 9 et traite les lettres de A à F, comme le reste des chiffres, où Un est de 10 jusqu'à F 15. L'hexadécimal est très pratique pour les ordinateurs car 16 est une puissance de 2, et un octet de 8 bits, donc exactement deux chiffres hexadécimaux pour coder (et chaque chiffre hexadécimal code exactement quatre chiffres binaires). La prise de0x41
l'expansion de4
à sa représentation binaire0100
et l'expansion de1
à sa représentation binaire0001
vous obtenez01000001
que vous pouvez voir est le code pourA
comme indiqué. Pour le convertir en décimal, c'est 4 x 16 + 1 x 1 = 65. Nous multiplions les 4 par 16 parce que chaque chiffre hexadécimal vers la gauche est 16 fois le chiffre précédent, suivant le même schéma que je vous ai montré ci-dessus pour la base 2 et 10.J'espère que c'est suffisant pour vous permettre de comprendre un peu plus sur le binaire et les codes ASCII.
Note 1: La raison de 8 bits dans un octet au lieu de 2 comme vous le pensez, c'est que de retour dans les premiers jours de l'informatique, il a été décidé que le 8 est beaucoup plus utile nombre de bits, 2 bits "octet", seulement encoder 4 valeurs. Pour transmettre les lettres majuscules et minuscules de l'alphabet, nécessiterait à lui seul 3 octets! Il n'y a rien d'inhérent à binaire qui force le choix de 8 bits par octet, sauf que 8 est également une puissance de 2 qui fait beaucoup de mathématiques impliqués dans le travail avec des informations binaires, plus simples et les choses s'aligner sur les bords de mieux. S'ils avaient choisi de 6 bits par octet, je suis sûr que les choses auraient travaillé à maladroitement, et n'aurait pas fait bon usage de l'ensemble des valeurs disponibles.
Note 2: Mon système de cinq bits dans un 10byte est fondée sur l'impossibilité d'utiliser ses dix 10bit par octet, ce qui donne un très grand nombre de déchets beaucoup d'espace de stockage. J'ai choisi cinq, dix est divisible par elle, qui serait sans doute utile. (À l'origine, ma réponse utilisé dix 10bit par 10byte, mais il était trop sacrément gros!)
Cette relation entre les majuscules et les lettres minuscules a été délibéré. Lorsque le code ASCII a été formulée, le matériel informatique était primitive et les logiciels nécessaires pour assurer la conservation de chaque octet. Retourner un seul bit prend très peu de matériel ou de code à accomplir.
http://asciitable.com/
Donc en soustrayant/ajouter une décimale 32 est en effet le moyen de convertir les majuscules/minuscules.
Qui est une différence de 0b01000000 en binaire ou en 0x20 ou 32 en décimal.
Ainsi, la commutation de la 6e changements bits de cas.
prendre un coup d'oeil, le 6 bits = 32, donc si vous le renversez vous subract ou ajouter 32
Maintenant, si vous regardez ici http://asciitable.com/vous pouvez voir la table ascii pour tous les personnages et les remarquerez que A = 65 et a = 97
Afin d'ajouter ou de soustraire 32, vous devez d'abord savoir si le personnage est plus ou moins de "A".
Lorsque ce livre a été écrit, les langages de programmation, la plupart des gens ont été en utilisant n'avait pas de Chaînes ou d' .equalsIgnoreCase. C'était avant-i18n, et quand une entreprise a un serveur, vous telnet (comme xterm), et d'obtenir une ligne de commande menu. Ce qu'il décrit, est généralement utilisé pour créer un joli casse menu pour vos utilisateurs, en prenant avantage du numérique, mise en page de la table ascii.
Il peut être très rapide, parce qu'il y a peu de sages instructions en assembleur pour faire le calcul dans les deux sens, indépendamment du fait que les personnages sont déjà de la partie supérieure ou en minuscules.
c = c | 32 //majuscules
c = c & (1+2+4+8+16+ 0 +64+128) //de minuscules
Dire que vous avez un Java-comme la langue, sans que les objets ou les libs standard.
Votre réseau auteur vous invite à un code comme ceci:
Avez-vous essayé de chercher sur Google, et parfois en majuscule le nom d'une personne?
Je pense que la plupart de ces réponses sont inutilement complexes et parfois condescendant.
Décimal ascii du caractère de la cartographie est arbitraire et n'a rien à voir avec la compréhension de la façon dont la base de 2 ou de la base de 10 œuvres. C'est purement pratique. Si quelqu'un à tort codé un caractère en minuscule, mais signifiait une majuscule, c'est plus pratique pour basculer juste un peu au lieu d'avoir à recoder un octet entier. C'est moins sujettes à l'erreur humaine à basculer juste un peu. SI la sortie est 'a', mais nous voulions "A", au moins nous savons que nous avons obtenu la plupart de peu à droite et nous avons juste à flip 2^5 à ajouter ou à soustraire 32. C'est tout simple. Pourquoi choisir précisément le bit 5 (c'est pas 6 comme certains l'ont dit, vous commencez à partir de 0..), bien clairement que c'est celui qui fait sens pour satisfaire les deux plages de 26 caractères, avec une seule inversion de bits. Si vous avez fait cela sur une moindre évalués bits, vous devez retourner plus d'un.