GNT sans publicité, site mobile, fonctionnalitées exclusives...

informatique/autodidacte-apprendre la manipulation de bits

Le
bpascal123
Bonjour,

Est-ce qu'on peut envisager d'apprendre le langage C sans connaître la
manipulation de bits et faire quelque chose avec ? Ou alors il faut
nécessairement apprendre d'autres langages (apprendre la POO me semble
indispensable pour une approche générale).

bpascal/heron maladroit
Lire les 66 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 14
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Samuel DEVULDER
Le #22249131
a écrit :
Bonjour,

Est-ce qu'on peut envisager d'apprendre le langage C sans connaître la
manipulation de bits et faire quelque chose avec ? Ou alors il faut
nécessairement apprendre d'autres langages (apprendre la POO me semble
indispensable pour une approche générale...).



A mon sens, qui est probablement minoritaire de nos jours, avoir une
connaissance pratique du bas niveau (par exemple l'assembleur d'un cpu
8/16 bits pas trop tordu, avec les notions d'accès mémoire direct ou
indirect, de 8 ou 16 bits, d'arithmétique signée ou pas, de réservation
de zones statiques initialisées ou non, de pile, de sous-programmes,
etc), aide beaucoup à se faire une image mentale précise de ce que le
compilo C réalise, et de là permet de comprendre ce que le C veut
effectivement faire avec telle ou telle déclaration.

Pour ma part j'ai pu constater que ceux qui connaissaient l'ASM passent
au C très rapidement car les concepts "bizarres/compliqués du C"
(pointeurs, vars auto, etc) sont très vite associés à ce que ça signifie
en vraie pour les CPUs et progressent super vite sans trop se poser de
questions métaphysiques liés aux architectures des CPU (comment marchent
les sous-fonctions, comment sa se passe qu'à la sortie d'une fonction
les var allouées sur la pile ne peuvent plus être utilisées?!?). Ils
peuvent alors se concentrer sur la partie algorithmique du C (écriture
des arbres, etc), et constater combien il est plus facile de faire cela
en C qu'en ASM.

A l'inverse, si on préfère rester loin du matériel, il y a d'autres
langages bien plus adaptés que le C pour débuter tout en étant tout
aussi puissant. Le pascal par exemple, même s'il est passé de mode, est
assez intéressant pour le débutant: typage fort, abstraction du
matériel, passage par adresse proprement masqué à l'utilisateur, etc. Il
permet de se concentrer sur l'algorithmique (exemple: l'usage de
sous-fonctions, les fonctions récursives, les structures de données)
sans se prendre la tête sur les détails matériels du CPU (alors le
tableau int[4][3] est il identique avec un int[3][4]?) . Je pense aussi
que si on connait le Pascal, le passage au C doit être facilité dans la
mesure ou l'on connait l'algorithmique et qu'il faut donc uniquement se
concentrer sur les implémentations C des concepts pascal (convertir les
VAR en pointeurs, les types en typedef, les packed array of booleans en
bitmasks, etc).

En tout état de cause, je pense que débuter par le C est difficile car
on se prends deux difficultés en une fois: Les architectures matérielles
et d'OS sous-jacent (pile, zone mémoire, accès en mémoire, arithmétique
signée, etc) plus les problèmes algorithmiques (sous programmes,
structures de données, programmation récursive). Du coup si on débute
avec un langage qui ne traite qu'un seul de ces aspect, au choix suivant
son appétence pour le domaine: soit la partie matérielle avec
l'assembleur, soit la partie algorithmique avec un truc genre Pascal, le
passage vers le C en sera simplifié je pense. En gros il ne reste qu'à
connaitre la syntaxe et les API "de base", et surtout de pratiquer:
c'est en programmant qu'on devient programmeur.

Bref, on peut donc monter de l'ASM au C, ou descendre du Pascal vers le
C, c'est relativement facile. Mais faire du C directement revient à
franchir deux grosses marches en une fois. On y arrive, mais c'est plus
difficile.

En revanche je déconseillerais de s'orienter vers l'orienté objet si on
veut faire du C. Les concepts et la façon de concevoir les programmes
sont quand même assez différents entre les deux familles de langages. Si
tu veux faire de l'OO, alors reste dans les langages du même niveau et
n'essaye surtout pas de porter ce qui se fait en OO dans le C. La
programmation objet c'est bien plus qu'un langage, plus qu'une syntaxe
différente. C'est une certaine façon de réfléchir et de représenter les
informations. Représentation finalement complètement différente de ce
qui se fait en C/ASM/Pascal. C'est vraiment un autre monde, autre chose.

Cela dit, c'est quand même bien pour la culture générale de voir comment
ils font pour concevoir les choses dans les langages objets. Si tu as le
temps et la curiosité regarde comment Smalltalk réalise les opérations
logiques: C'est vraiment spécial et ingénieux de concevoir que le True
et le False logiques soient des classes distinctes dont le traitement
des messages AND, OR, NOT différent. Ca marche, c'est super élégant,
mais on est vraiment très loin de ce qu'on ferait en C. Comme je le dis,
l'objet c'est vraiment une autre façon de voir le monde.

sam.
espie
Le #22249381
In article
Bonjour,

Est-ce qu'on peut envisager d'apprendre le langage C sans connaître la
manipulation de bits et faire quelque chose avec ? Ou alors il faut
nécessairement apprendre d'autres langages (apprendre la POO me semble
indispensable pour une approche générale...).



Oui, c'est tres possible de faire du C propre, sans connaitre la
manipulation de bits. Il faut juste que tu arrives a te faire un modele
raisonnable de la gestion memoire et de l'arithmetique sur pointeur.
-ed-
Le #22250211
On 12 juin, 21:01, ""
Est-ce qu'on peut envisager d'apprendre le langage C sans connaître la
manipulation de bits et faire quelque chose avec ?



Les opérateurs bitwise ont leur utilité mais on peut s'en passer dans
bien des cas. Cependant, ils permettent, notamment, de traiter des
informations de bas niveau codées 'en bit' (HDLC) où dont les bits ou
groupes de bits ont une signification particulière (en-tête IP, par
exemple). Pour les mêmes raisons, ils permettent d'économiser de la
place de stockage, mais le traitement des accès est plus long.

Ou alors il faut
nécessairement apprendre d'autres langages (apprendre la POO me semble
indispensable pour une approche générale...).



Tu passes du coq à l'âne. Que vient faire la POO dans les opérateurs
bitwise ? De plus, la POO n'est pas un langage ...
bpascal123
Le #22250751
Tu passes du coq à l'âne. Que vient faire la POO dans les opérateur s
bitwise ? De plus, la POO n'est pas un langage ...



En fait, je me demandais si on pouvait manipuler des bits avec des
langages orientés objets? Ou alors est-ce que le C est le plus
pratique pour ce genre de manipulations?
xtof.pernod
Le #22251191
Le 13/06/2010 14:54, a fait rien qu'à écrire :
[Le 13/06/2010 12:18, -ed- a fait rien qu'à écrire :]

Tu passes du coq à l'âne. Que vient faire la POO dans les opérateurs
bitwise ? De plus, la POO n'est pas un langage ...



En fait, je me demandais si on pouvait manipuler des bits avec des
langages orientés objets? Ou alors est-ce que le C est le plus
pratique pour ce genre de manipulations?



J'vais p't'être dire une bêtise, mais la POO, AMHA, c'est pour
manipuler des concepts +/- abstraits, en tout cas d'assez haut niveau.

Et les bits, c'est plutôt de bas niveau.

Maintenant, on peut toujours définir un objet 'bit' avec des méthodes
qui vont bien. Ca dépend de l'approche, des contraintes, de comment
on y applique, de la météo, etc..

--
christophe.
Publicité
Suivre les réponses
Poster une réponse
Anonyme