Les opérations de décalage sont-elles de complexité O(1)
ou O(n)
?
A-t-il du sens que les ordinateurs nécessitent généralement plus d'opérations pour décaler de 31 places au lieu d'une place?
Ou a-t-il du sens que le nombre d'opérations requis pour le décalage est constant quel que soit le nombre de places que nous devons décaler?
PS : se demander si hardware est une balise appropriée..
0 votes
Est-ce qu'ils nécessitent plus d'opérations pour se décaler vers la gauche de 31?
2 votes
Ma connaissance en matière de CPU est assez ancienne, mais chaque instruction de décalage que j'ai vue décale d'un bit, donc vous avez besoin d'exécuter une boucle pour décaler plus d'une fois. Je suppose qu'il est possible que les CPU modernes aient des instructions de décalage qui décalent d'un nombre spécifié de bits en un cycle d'horloge.
1 votes
Sur ma machine
int test(int i) { return i << 30; }
devientsall $30, %eax
0 votes
Lorsque vous descendez à l'assemblée, c'est comme shl ou shr sur x86
9 votes
Les
shl
etshr
d'assembleur x86 permettent des décomptes de décalage arbitraires, mais les cycles CPU réels nécessaires dépendent de ce que vous faites et du CPU lui-même. Pour les 286, c'est O(n), pour les 386+, c'est O(1).2 votes
@Robert Harvey, l'instruction shr/shl sur x86 peut prendre un nombre de bits à décaler depuis au moins 8086, soit depuis 1978. Vous avez certainement besoin de rafraîchir vos connaissances en matière de CPU ;)
0 votes
@awoodland Est-ce du java ou du C# ?
0 votes
@MarcB zsmith.co/intel/intel_s.html#sal a de bons détails sur
sall
1 votes
@unbeli: Oui, mais cela ne signifie pas nécessairement que ces opérations sont O(1).
0 votes
Le manuel Cortex-M4 indique qu'il faut 1 cycle. developer.arm.com/documentation/ddi0439/b/Programmers-Model/…