Bonjour à tous.
Après recherche, je n'arrive pas à trouver la réponse sur le net.
Pouvez-vous me dire quel est la signification du | dans une declaration de tableau.
Par exemple :
Merci d'avanceCode:const int volume[] = {100|10,100|10000};
Version imprimable
Bonjour à tous.
Après recherche, je n'arrive pas à trouver la réponse sur le net.
Pouvez-vous me dire quel est la signification du | dans une declaration de tableau.
Par exemple :
Merci d'avanceCode:const int volume[] = {100|10,100|10000};
Bonjour Sve,
C'est de plus assez dangereux car cela laisse penser que 100 et 10 sont en binaire. Ici nous avons la chance qu'il n'y ait pas de bit commun entre 100 (0x64) et 10 (0x0A). et donc le résultat est similaire entre base 10 et base 2.
Mais cela ne marche plus dans le cas de 1000 (0x3E8) et 100 (0x64) qui donne 1004 (0x3EC) car E couvre tous les bits de 6 (E | 6 = E).
Cela ressemble à un piège d'enseignant. C'est peut être le but.
Salut
Merci pour cette remarque. Je me suis fait directement avoir effectivement en raisonnant directement en binaire, oubliant que écrit comme cela, on est en décimal...
A ce propos, si je ne me trompe pas, la déclaration de variables initialisé directement en binaire n'est pas standard en C.
Si mes infos sont vrais, je trouve ça dommage, bien desfois ou j'aurai préféré ecrire dupar exempleCode:int i = 0b0101;
Bonjour simooon,
Non ce n'est pas standard. Il existe parfois des notations B01010011, mais en fait ce sont justes des constantes de type byte B00001010 = 10; souvent définies dans une énumération. Pour éviter d'en avoir trop, elles ne couvrent que les bytes ce qui en limite l'intérêt.
Une autre chose serait utile, me semble-t-il, serait l'existence d'un séparateur comme "_" qui existe dans d'autres langages. A l'heure où on manipule des nombres de plus en plus grands, pouvoir écrire 12_978_852_456 serait plus lisible que 12978852456 de même que 0xFA_09_AC_F1_55_71_5E_01 ou 0xFA09_ACF1_5571_5E01 au lieu de 0xFA09ACF155715E01.
On peut toujours rêver, mais il faut bien des sources d'erreurs :D
Salut
Tu n'as pas de binaire non mais tu as de l'hexadécimal qui y est directement associé. Parce 2^4=16 il suffit de convertir le binaire en prenant les digits 4 par 4 pour avoir l'hexa correspondant.
Exemple ton 0b0101 donne directement 0x5 (que j'écrirais alors plutôt 0x05 pour bien montrer que je veux occuper 8 bits).
Et même avec plus compliqué comme 0b00101100101101 là encore il suffit de découper 4 par 4 (en partant de la fin) ce qui donne 00 1011 0010 1101 et on traduit ça (presque) instantanément en 0x0b2d.
Ce n'est effectivement pas du C standard, mais certains compilateur comprennent cette notation.
C'est le cas de gcc :
https://gcc.gnu.org/onlinedocs/gcc/B...constants.html
c'est une extension au langage C proposée par gcc.
Même dans C++, à ma connaissance c'est un ajout récent genre C++17 (ou "récent" genre C++11).
Edit: Il s'avère que c'est C++14 qui l'a ajouté.