Bon je voulais mettre ça dans la shoutbox car ça vaut pas vraiment un thread, mais elle a l’air de pas apprécier mon message, donc je demande ici.
que veut dire “1 << 9” dans
J’ai vu ça dans la classe SWT, et j’avoue que ça m’intrigue. les “<<” n’étant pas très appréciés des outils de recherche, autant demander à des humains :).
oh oui, dans la programmation systeme.
tu prends un registre d’un composant et tu veux mettre le bit 9 a 1 : tu fous (1 << 9) dans le registre avec un OR logique.
ex:
registre = registre | (1 << 9).
Ca touche pas aux autres bits, et ca mets le 9e bit a 1.
Par contre, je crois qu’il faut faire gaffe par contre aux systemes little endian / big endian (si je me trompe pas, le décalage se fait a droite ou a gauche selon si c’est l’un ou l’autre.)
Non, c’est juste une question de lisibilité. Surtout quand on fait des masques, genre je veux le bit 4 et le bit 8 à 1 et les autres à 0, je peux écrire ça de deux façons différentes:
int mask = (1 << 4) + (1 << 8);
int mask = 272;
La première ligne permet de clairement voir de quels bits on parle.
Sinon, SWT est une bibliothèque bas niveau avec pas mal de code en natif, il peux donc y avoir des intérêts vu que ce type de notation est beaucoup plus utilisés en C/C++.
Ca coute aussi beaucoup moins cher en temps machine, pour faire une puissance de 2, de faire un shift que d’appeler la fonction de maths correspondante (Math.pow, pow…)
Ha bin ouais, a la declaration d’une constante, c’est sur que ca coute moins cher en temps machine d’ecrire 1 << 9 plutot que 512 …
Honnetement, a par rendre ton code illisible, je vois aucun interet ici. Aucun quand on fait de la manipulation de bit, comme dans le decodage de trame par exemple, la notation x<<y est tres appreciable, autant la …
[quote=« cben76, post:12, topic: 37857 »]Ha bin ouais, a la declaration d’une constante, c’est sur que ca coute moins cher en temps machine d’ecrire 1 << 9 plutot que 512 …
Honnetement, a par rendre ton code illisible, je vois aucun interet ici. Aucun quand on fait de la manipulation de bit, comme dans le decodage de trame par exemple, la notation x<<y est tres appreciable, autant la …[/quote]
Selon moi, ça sert juste à insister sur le fait que ce soit une puissance de 2.
[quote=« LodeRunner, post:15, topic: 37857 »]Non, mais dans l’absolu…
En l’occurence, ca m’est arrivé pour des declarations de constantes avec des shift pour faire des bitmask.
const KeyModifier ControlKey = 1 << 0;
const KeyModifier AltKey = 1 << 1;
const KeyModifier ShiftKey = 1 << 2;
const KeyModifier MetaKey = 1 << 3; // better known as the "WIN" key on WIN32, and "COMMAND" key on OSX, see below
const KeyModifier MenuKey = 1 << 4;
C’est plus lisible que 1, 2, 4, 8, 16 ou meme que 0x01, 0x02, 0x04, 0x08, 0x10.[/quote]
Bin c’est ce qu’on dit depuis le depart : dans le cas ici present, ca sert a rien, a part a rendre le code plus obscure (ou insister sur le fait que c’est une puissance de 2 mais bon).
Ca veut pas dire qu’il faut jamais l’utiliser ou que c’est toujours moins clair. Ton exemple le montre, ou quand on a besoin de traitrer des flux.
Mais ici, je vois pas.
Je vois pas pourquoi vous vous battez la
Un bon vieux 1<<9 des familles est plus rapide a taper et plus facile a lire qu’un assignement avec commentaire, de plus, quand vous en avez des pages et des pages, et que vous faite du bit shift dans des registres obscures de GPUs, je suis sur qu’il y a des trucs beaucoup plus interessant a mettre dans le commentaire que le fait que « oui, 512 == 2^9 == 1 << 9 » :crying:
Vous savez ce qu’ils vous disent, les anciens codeur C?
Sarieux, ils respectent plus rien, ces jeunes cons
[quote=« c0unt0, post:19, topic: 37857 »]Je vois pas pourquoi vous vous battez la
Un bon vieux 1<<9 des familles est plus rapide a taper et plus facile a lire qu’un assignement avec commentaire, de plus, quand vous en avez des pages et des pages, et que vous faite du bit shift dans des registres obscures de GPUs, je suis sur qu’il y a des trucs beaucoup plus interessant a mettre dans le commentaire que le fait que « oui, 512 == 2^9 == 1 << 9 » :crying:
Vous savez ce qu’ils vous disent, les anciens codeur C?
Sarieux, ils respectent plus rien, ces jeunes cons [/quote]
Un bon développeur, est toujours un peu faignant (dans le sens qu’il va se casser le cul pour factoriser un maximum de trucs, et écrire le moins possible, et aussi avoir le temps de prendre 5 poses café dans l’après-midi), donc un bon développeur ne connait pas ses tables de puissances de 2, donc un bon développeur utilise le bit shift :