CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Question d'un test technique

RegleGraduee
RegleGraduee
Niveau 71
16 mars 2019 à 01:35:57

Salut,

Il y a quelques jours j'ai passé un test technique sur CodingGame pour un boulot en C/C++.
Déjà je suis pas très fan de ce site, car je trouve que ça ne juge que les capacités sur un instant t, avec quelques pièges et des exceptions et après quelques mois tu peux déjà avoir oublier quelques notions d'un langage... :hap:

Bref...

J'ai eu comme question :

Qu'affiche :

int main()
{
    int i = 10000 >> 4;
    printf("%d", i);
    return 0;
}

Si je me souviens j'avais environ 50 secondes pour y répondre.
Mais j'ai du mal à comprendre comment on peut savoir ça aussi rapidement.
Sachant que pour moi il faut calculer 10000 en base 2, faire le décalage (et pas se gourer entre le big/little endian), et refaire la conversion en base 10. :(

Du coup je me demandais s'il existait une astuce pour calculer rapidement les décalages de bits :(

Maxou_E
Maxou_E
Niveau 1
16 mars 2019 à 01:51:42

10000 >> 1 = 5000
5000 >> 1 = 2500
2500 >> 1 = 1250
1250 >> 1 = 625

10000 >> 4 = 10000 / 16 = 10000 / 2^4 !

Decaller a droite revient a diviser par 2 puisqu'on enleve 1 zero, dans le cas d'un nombre pair.

Si tu decalles pour un nombre impair N c'est N >> 1 = (N-1) / 2 puisqu'on retire non plus un 0 mais un 1

RegleGraduee
RegleGraduee
Niveau 71
16 mars 2019 à 01:54:17

Le 16 mars 2019 à 01:51:42 Maxou_E a écrit :
10000 >> 1 = 5000
5000 >> 1 = 2500
2500 >> 1 = 1250
1250 >> 1 = 625

10000 >> 4 = 10000 / 16 = 10000 / 2^4 !

Decaller a droite revient a diviser par 2 puisqu'on enleve 1 zero, dans le cas d'un nombre pair.

Si tu decales pour un nombre impair N c'est N >> 1 = (N-1) / 2 puisqu'on retire non plus un 0 mais un 1

Ah super, je m'étais jamais fait la remarque, que >> 1 revenait à diviser par 2 :hap:
Merci, maintenant je saurais :hap:

godrik
godrik
Niveau 30
16 mars 2019 à 15:31:00

En effet, c'est un test relativement debile.

blackapplex
blackapplex
Niveau 10
16 mars 2019 à 16:06:37

Le 16 mars 2019 à 01:54:17 RegleGraduee a écrit :

Le 16 mars 2019 à 01:51:42 Maxou_E a écrit :
10000 >> 1 = 5000
5000 >> 1 = 2500
2500 >> 1 = 1250
1250 >> 1 = 625

10000 >> 4 = 10000 / 16 = 10000 / 2^4 !

Decaller a droite revient a diviser par 2 puisqu'on enleve 1 zero, dans le cas d'un nombre pair.

Si tu decales pour un nombre impair N c'est N >> 1 = (N-1) / 2 puisqu'on retire non plus un 0 mais un 1

Ah super, je m'étais jamais fait la remarque, que >> 1 revenait à diviser par 2 :hap:
Merci, maintenant je saurais :hap:

C'est probablement parce qu'en temps normal tu fais l'ERREUR d'utiliser l'opérateur de division alors que tout le monde code en faisant des opérations bits à bits évidemment :noel:

Anti_Crypto
Anti_Crypto
Niveau 10
16 mars 2019 à 16:35:58

En C tu peux être amené à faire des opérations de ce genre à la limite. Ca me choquerait bien plus si l'on posait la question dans un langage très haut niveau. Donc sans plus d'info sur le contexte, why not.

Message édité le 16 mars 2019 à 16:36:41 par Anti_Crypto
godrik
godrik
Niveau 30
16 mars 2019 à 18:31:02

La question peut avoir sa place dnas un test, mais mettre une limite de 50 secondes pour une question etrange est completement debile. Une question sur les trigraph serait du meme genre. Ou une question sur la priorite des operateurs en C. Ce sont des choses que tu sais que ca existe et tu y reflechis plus precisement quand tu les recontre/en a besoin.

En particulier le >>1 pour diviser des entiers par 2 a quasiment disparu parceque les architectures intels ne sont pas plus lente a diviser par 2 qu'a shifter d'un bit. (ARM est une autre question.)

RegleGraduee
RegleGraduee
Niveau 71
17 mars 2019 à 18:36:00

Le 16 mars 2019 à 18:31:02 godrik a écrit :
La question peut avoir sa place dnas un test, mais mettre une limite de 50 secondes pour une question etrange est completement debile. Une question sur les trigraph serait du meme genre. Ou une question sur la priorite des operateurs en C. Ce sont des choses que tu sais que ca existe et tu y reflechis plus precisement quand tu les recontre/en a besoin.

En particulier le >>1 pour diviser des entiers par 2 a quasiment disparu parceque les architectures intels ne sont pas plus lente a diviser par 2 qu'a shifter d'un bit. (ARM est une autre question.)

J'ai eu un autre test sur le même site, pour une autre boîte en Python. Où je devais lister en 30secs les types immutables en Python. En pratique tu te poses jamais la question, tu sais les manipuler et c'est tout.

Bunyan
Bunyan
Niveau 17
18 mars 2019 à 16:48:51

Ou si t'as besoin de l'info, tu vas chercher et tu as la réponse en moins de 5 minutes.
Les seuls contextes où savoir ça par coeur peuvent importer sont ceux liés à la Défense car il n'est pas rare que les ordinateurs utilisés pour le développement n'ont pas accès à internet (mais y'a toujours un poste ayant internet et non lié au réseau interne utilisable non loin, donc bon...).

Anti_Crypto
Anti_Crypto
Niveau 10
18 mars 2019 à 19:12:19

Le 18 mars 2019 à 16:48:51 Bunyan a écrit :
Ou si t'as besoin de l'info, tu vas chercher et tu as la réponse en moins de 5 minutes.
Les seuls contextes où savoir ça par coeur peuvent importer sont ceux liés à la Défense car il n'est pas rare que les ordinateurs utilisés pour le développement n'ont pas accès à internet (mais y'a toujours un poste ayant internet et non lié au réseau interne utilisable non loin, donc bon...).

Les gens recherchent tout simplement sur leur smartphone :hap:

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment