Décalage binaire

Un décalage binaire est une opération qui peut être directement réalisée par le processeur et qui consiste à décaler d'un ou de plusieurs rangs les bits d'un nombre vers la gauche ou vers la droite.

Multiplication et division

Tout comme en base décimale un décalage à gauche représente une multiplication par \(10\), en base binaire, un décalage à gauche correspond à une multiplication par \(2\).

A contrario, le décalage à droite représente une division par \(2\).

En python, l'opérateur décalage à droite s'écrit >> et l'opérateur décalage à gauche <<.

🐍 Console Python
>>> 10 >> 1  # décalage à droite de 1 bit (division par 2)
5
>>> 5 << 3  # décalage à gauche de 3 bits (multiplication par 2*2*2=8)
40

On se propose de représenter des quartets (groupes de \(4\) bits) par des tableaux de quatre entiers. Le nombre ci-dessous représente donc le nombre binaire \(1110_2\).

image

Un décalage à droite va donc décaler tous les bits d'un rang vers la droite, puis mettre la valeur \(0\) pour le bit de poids fort. La valeur du bit de poids faible est perdue.

image

Un décalage à gauche va décaler tous les bits d'un rang vers la gauche, puis mettre la valeur \(0\) pour le bit de poids faible. La valeur du bit de poids fort est perdue.

image

On demande d'écrire les fonctions decalage_droite et decalage_gauche qui prennent chacune en paramètre un tableau nombre de \(4\) bits (entiers égaux à \(0\) ou \(1\)) et effectuent le décalage correspondant d'un bit vers la droite ou vers la gauche.

Ces fonctions modifient le tableau nombre en place et ne renvoient rien.

🐍 Console Python
>>> nombre_binaire = [1, 1, 1, 0]
>>> decalage_droite(nombre_binaire)
>>> nombre_binaire
[0, 1, 1, 1]
>>> decalage_gauche(nombre_binaire)
>>> nombre_binaire
[1, 1, 1, 0]
Decompactage

Le procédé de décompactage, unpacking en anglais, consiste à affecter les valeurs d'un p-uplet dans différentes variables et ce, en une seule instruction.

Ainsi, les instructions suivantes :

🐍 Script Python
a = 5
b = 4
c, d = a, b

permettent de placer la valeur 5 dans la variable c et la valeur 4 dans la variable d.

Dans ce cas, il faut naturellement qu'il y ait autant de variables dans la partie gauche de l'affectation que d'éléments dans le p-uplet.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_;8bcdufvgI/0lyàq n7apSr1L-meh,(P2=4:+twki9][5R)é6050j0G0Q0y0T0r0b0v0i0r0y0b0b0M010Q0T0z010406050b0k0F0F0y0B0s040A0d0r0k0_0d0w0v020y0F0z0f0v0Y0G130B0u0k0G0b050p101214160~0z041u1B051E0p1E1G1B0~0j0T0m0.0:0=0@0H0T0n0H0r1U0H0Q0|050)0h0r0G1P0;0?011T1V1X1V0Q1%1)1#0Q0h0d0j161$0B1C0Q0H0.190b0z0y0w0@0L011+1R010l0+0G0w1h0G1#26282d1-2g1)2j0F2l040a0v0K0B0d0z0d0b0T1c1e0%240B0B0G0i2G1u2n0w1C0p222S0Q201 210j2p0@1X0w2i2D1#1M1O0/1,2$0T2(0w1|1N1#0z2L1C2Q2S2}0 271e2.2e2?0B130r0|0C2P310}302o331-35370|0L3b283d2Q2#013i0y38040c3m2R0~3p3g0@3s3u0N3x3o313q3D0|0X3G3z3I3B3r0d363t0|0#3N3e321Q3h3S3j040x3X3A3!3C3$3U040g3*3P3,3R3T3u0U3G1D2{1u2,2V0j2Z3q0i1|2v0$1N1C2`0G2|3c3|450%4d3f3@0S0|0%0l3|3+2/010R0|0v4p3?4r0w0l4m2M3t0y0n0G0e0j2A2F0G4w4j4r0{040J4M3Z4y0|2?0F0h2L4S3q4P0Z0O3N0v4*4v4q344V0d4X4Z1v4e4-1-4P0W4!3Q0F0T394|3@4P0V0I3G4,4x4.044W4Y4L4?3n3Y4#0|4{5e2R5g4}4 043l5k4i4T2e53555r574N595b4=2 4^0@4`514r4~0|3w5r5m520|0V565N4r0d0|0M5R5E3r4/4;5d5D584_5i5H2e5J040q5+5)04545X5(3C5!5c5:5F5*5M5Y5-3a5 5^015v5@5z3h5`5C4@645G63680@5-5q5%6g655P4)4+5S5A4:5{6f5t5;5j6k6v6h5o5/6u5h5=676z015U045W5x6q1-5-6C2}066S3O6l4l044n5|4s4u6Z4z4B0i4D4F0e0n0y0k0i0H5$6c6l4P4R6D3Q0w6a6=5f5Y4$4(5r064+5y6H6|5a6s6b6 6d5~6y3q6P6Z666M5Y785B6~5l707e6?6H617i5P5w2}763J6}7v046x7s7g5o6j7F3Q536G3q6J6L7y6N5_795#7C7E7c6l7u6`5O5=7x3c7z6{7B7!4O7r7X7t7H7C5?7k647m7a7o5s6E7W7p645-5L7f7K6n73757R5Z7T6t837#7~7|5n5K7=7M3Q7O8j3@7h731u4g4c3}8s0p401u0Q428x2X2T1{1}2V0y1(8u401A8f3@2L0F0e0l0y0S4G0H0c0|1m1o1q1s0v722 1H3d1B0D002;0b2W6/2G4v8r3q1/1W1Y1!8L4U040m3t0G0k0B1t7,5u7.7 7Y6B7=7%3n7)3@788 1)92948c7-7D6Z7Z9l967$8m8}9h91937V9o7;955;5Q7@6l8l9E770|9v9j9y9B6A509N6m9s9H7A8~909L9Q6e9q6O9A9!5}9S7Q7l9J9W9x9Y978|5,5o827J7#9D8%8r040v2L0m0T2i0Q0v0t0v8Q0T2L0v2i0v0k2(0v0b911)0v1;ae1)0-8-8/2N0T1d0-101N280Q8!721K482-3@8^1;1Z2m642r2i2k0|2x0A0i0B0`a30K0s221d3|4b5s2~4e9|889g9-9k9^9m8e888o9%9R9`7(889G9*7^9,9i9.a:9Za+9=9Pa~856Ra%a{9wa*7/7}9zb2b09C9t2ea^a?9+9Va|b9986Ha ba8g5p8i8pbk9Ka}be9(a-609$bza;bg1-bi9db6blb89Ma:81bub50pa$1H3~8v498K0o0r0v6.0B0*a30!6-1)2u0wb)0Q0!0v2C0=0T8H0v0j001b0+0Tag0Bacae8.0B8:921*2F0!b%0_0m1*az3d2,8@1YaF8{1F3~8%2 a$5Y6W6Y9Q4t9}6$4A6X4C0:6+4I0d4K7C6_a:7_7U9/044%6o4*886W0l3SbG7S0TcU6Icv2;cX0w0h0|b%0w4FcGbc3v7C9c2R9e5I9acLc:cw5Y6J0Ec-62b3cM8$3c74756pbk7nbNbE78cWcLa=bJc{5Vc#7+d0bBa`04dca_9F0|c}9Tbsc bE7L86d6dmd8cLdl990|6Qdwb4bj64bIc;a.c@6R6ScQ4B4ocu6#9Q6%cz6)cB4G6-6/6;c,dWdjdHd1cOc=2ecRcTdt9f0|dodJ9FcZ0wc#c%04c)c+cLcHbEbPcLcNdyd5d/698a7bbobbd*dnbQd`6HdLc`dA7`d9brd@eid?5T0|0PcX9pd,de3y87d7epdCc-9@er9meBendq6KeydOd38q462SaY3 bX3 0(0*0,04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_;bcdufvgI/0lyàq n7apSr1L-meh,(P2=4:+twki][5R)é6050i0F0P0x0S0q0b0u0h0q0x0b0b0L010P0S0y010406050b0j0E0E0x0A0r040z0d0q0j0@0d0v0u020x0E0y0f0u0W0F110A0t0j0F0b050o0~1012140|0y041s1z051C0o1C1E1z0|0i0S0l0,0.0:0=0G0S0m0G0q1S0G0P0`050%0g0q0F1N0/0;011R1T1V1T0P1#1%1Z0P0g0d0i141!0A1A0P0G0,170b0y0x0v0=0K011)1P010k0)0F0v1f0F1Z24262b1+2e1%2h0E2j040a0u0J0A0d0y0d0b0S1a1c0#220A0A0F0h2E1s2l0v1A0o202Q0P1~1}1 0i2n0=1V0v2g2B1Z1K1M0-1*2!0S2$0v1`1L1Z0y2J1A2O2Q2{0}251c2,2c2;0A110q0`0B2N2 0{2~2m311+33350`0K39263b2O2Z013g0x36040c3k2P0|3n3e0=3q3s0M3v3m2 3o3B0`0V3E3x3G3z3p0d343r0`0Z3L3c301O3f3Q3h040w3E1B2_1s2*2T0i2X3o0h1`2t0!1L1A2^0F2`3a3(3;0#3|3d3Y0=0R0`0#0k3(3y43010Q0`0u493N4b0v0k462K3r0x0m0F0e0i2y2D0F4g422-010_040I4w3X4y0v0`2;0E0g2J4D3o4A0X0N3L0u4S4f4a4F4H0d4J4L1t3}4V2c4A0U4M3O0E0S374+4b4A0T0H3E4U4h4W044I4K4v4#3l3W4N0`4*502P524,4.043j56414E4(0`4?4^584i4X4Z4 2}4%1+4)4:4y4-0`3u5d5k4y4=5j5q0=0d0`0L5C4`325m4~5t5g04555p5J1+5v040p5N5r5h4@5d4_4x5K4|4Y5M5y5D4z545X0=5U385,5S0=4=5!2{5$5f3f5L4!5R5%5Y5P5:015U5c625~5_5h4R4T5z5(4}614$5^5.655@635;5a5W6o6b6m0T5I6p015F045H5#6g5T6r3L3M6y450447664d044f6t3H4k6L4m0.4p0e0m0x0j0h0G5o6k6y4A4C6R3O4G5)5n664O4Q5d064T5}3H606(515-5s6-4b5U6s6a53045i6D5-6/6i6~57705/725u5a5?763O5`6x6u7c5*6j6 6l717m735a696)6u5B7a6l6A6C5|6E3A6}6=7h7x7j4/7i5O797I7b7L7R645Q7B3o687M785{3a6{6.7W7O5O7Z7u6y5U5x7.646w6^6`7J3p7-7!7n7N807y5w7%7`7U7F5G7p7#6G6^1s3 3{3)8h0o3,1s0P3.8m2V2R1_1{2T0x1$8j3,1y5e3o2J0E0e0k0x0R4q0G0c0`1k1m1o1q0u6@2}1F3b1z0C002/0b2U6#2E4f8g3o1-1U1W1Y8A7,040l3r0F0j0A1r7X6c6n7^6q0`75835A5Z8b8/8;1%8@8_8}6m7:7f6l5=867)3l7+5l8:8=987%9c8.845b86944b7G9u4{968?8^9o669f8`6v9h2P9j9y9m9B9F7w912c7$9N937E6y6/9z9n9S8|9P6F859Z873}0o8g6P2J0l0S2g0P0u0s0u8F0S2J0u2g0u0j2$0u0b8?1%0u1/a01%0+8Y8!2L0S1b0+0~1L260P8P6@1I3@2+4b8*1/1X2k6l2p2g2i0`2v0z0h0A0^9=0J0r201b3(3`5e2|3}9,7}9W9L999#8{9p7}749t9U6u9waZ6|9l979M9a9O7;6u9Ea+6d8e7Va(9AaSa-77aV5-a/aT6v9x2ca#889V0`9Xa*a a,9d7=7zaY2{6I7qb6aR9C9F9Ra:78b11+b37*aPbia)a_bb7C82a`599%bn9)3l0|9+3=2QaK3+3^8z0n0q0u6!0A0(9=0Y6Z1%2s0vbU0P0Y0u2A0:0S8w0u0i00190)0Sa20A9~a08Z0A8#8@1(2D0YbS0@0l1(al3b2*8)1War8-1D3*8S2}aO5-6K6M9F6O6Q9a4j4l0h4n6X4s0d4u7%6,cm7 bA4;0`4P6e4S7}6K0k3Qbp7K040ScJ6z6O2/cN0v0g0`bS0v4pcv9D5a7@b90`9H6PaW8dbnc(9Jb20`0DcZ7QbncC7{6`6fa?7dbkcxcLbebs5-br9ibt6:5+bna|6l6/cMa$3O6Ac;de9r7lc$boc_cEc|7s7e9q929!cz7P5Vd1d5d38adidw90bF06bg3och0F48cj4e66cn6Ucp6W4q6Z6#6%cY9F7r6;9Zc^bf7|cg0`cH0AcR0`ddb4a!cP0vcRcT04cVcX9Zcwa 7?7%d$3a6_c`dodbcybxa{dOd.dy9I7}d4eddpd!d9ead0dCc/040OcNa~dv7ScDc.5 d77te881duez9rc#es7_cNefc)a}c+e28fbI8i2Q8y3+0$0(0*04.