Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

informatique/autodidacte-apprendre la manipulation de bits

66 réponses
Avatar
bpascal123
Bonjour,

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

bpascal/heron maladroit

10 réponses

1 2 3 4 5
Avatar
Samuel DEVULDER
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.
Avatar
espie
In article ,
wrote:
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.
Avatar
-ed-
On 12 juin, 21:01, ""
wrote:
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 ...
Avatar
bpascal123
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?
Avatar
xtof.pernod
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.
Avatar
Alexandre Bacquart
On 06/12/2010 09:01 PM, wrote:
Bonjour,

Est-ce qu'on peut envisager d'apprendre le langage C sans connaître la
manipulation de bits et faire quelque chose avec ?



Oui, mais c'est toujours un plus de connaître ces trucs là (ne serait-ce
que pour lire et comprendre du code). Rien n'oblige à y avoir recours,
c'est juste fortement conseillé quand on fait du bas niveau.

Je suis peut-être pas le mieux placé pour en parler puisqu'en tant
qu'autodidacte, j'ai fais des années d'assembleur avant de pratiquer le
C. C'est peut-être vrai qu'au début, les opérations sur les bits peuvent
paraître un poil indigestes et on se demande finalement à quoi ça sert
tout ça, mais il n'y a quand-même pas 36 concepts à appréhender... 3
opérations de base à 2 arguments (OR, AND et XOR), 1 opération à 1
argument (NOT), les décalages et les rotations (ça franchement, c'est
enfantin) et c'est à peu près tout ! On fait le tour de toute la théorie
en une heure à tout casser. J'ai appris tout cela sur une petite doc
minuscule (genre mini-fascicule) et je n'avais que 10 ou 11 ans :) J'en
conviens, ça n'est pas venu tout seul, j'ai bien dû repasser dessus une
vingtaine de fois avant de bien assimiler la chose (j'étais peut-être
précoce, mais pas une flèche). Mais avant même d'être de l'informatique
(rapport au sujet), c'est d'abord la base de l'électronique.

Bref, pas de quoi fouetter un chat quand-même. A coté de ça, apprendre
le C dans son ensemble est quelque-chose de bien plus fastidieux. Donc
c'est plutôt dommage de s'en passer.


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



Je ne te suis plus très bien. Autant les manipulations de bits sont des
concepts très bas niveau, autant la POO c'est l'inverse. Apprendre la
POO ne te servira à rien pour apprendre à faire du C correct. La POO,
c'est une façon de penser ton programme, rien à voir avec
l'apprentissage du C, de nombreux programmeurs ont pratiqué le C avec
succès sans même savoir ce que POO voulait vraiment dire, à commencer
par moi.



--
Alex
Avatar
Alexandre Bacquart
On 06/13/2010 02:54 PM, wrote:

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?



En général, oui. C++ et Java, par exemple, manipulent les bits de la
même manière que C, avec les mêmes opérateurs, les mêmes règles, les
mêmes résultats.


Ou alors est-ce que le C est le plus
pratique pour ce genre de manipulations?



Tellement pratique pour ce genre de manipulations que d'autres langages
plus évolués font exactement la même chose :)


--
Alex
Avatar
Samuel DEVULDER
a écrit :
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?



Oui.. mais en héritage des langages de bas niveau. C'est jugé par les
puristes comme une erreur, car on peut avoir des langages a objets sans
aucune notion de bits explicites (cf Smalltalk où mêmes les booleens
sont des objets).

Ou alors est-ce que le C est le plus
pratique pour ce genre de manipulations?



En objet on ne pense pas ainsi avec des données bas niveau. On pense le
code à un autre niveau, à un niveau ou l'information est plus riche que
de simple bits. On manipule des "objets" pas des "bits". C'est vraiment
autre chose.

A mon avis vu ce qui t'intéresse est le bas niveau alors ne regarde pas
du coté de la POO, et concentre toi sur le bas niveau et l'algorithmique
simple. Apprends à structurer ton code, à connaitres et savoir utiliser
toutes les sortes de boucles (repeat until; while; for) à le découper en
procédures élémentaires (tu te demandais à quoi sert une sous-fonction
l'autre jour), à jouer avec la récursivité et les structure de données
hiérarchiques permettant de résoudre les choses élégamment).

Je te conseillerais en pratique de *NE PAS* faire du C directement
(c'est une perte de temps avec des complications inutiles pour toi),
mais un truc ou il est plus difficile de se tirer une balle dans le pied
par accident.

Regarde plutôt du coté du Pascal par exemple. Il te permettra de
structurer ta pensée procédurale et d'élaborer les fonctions et
structures de données pour résoudre les problèmes compatible avec la
programmation C (ou ASM).

Ensuite, une fois que tu maitrise bien la programmation "facile", alors
tu peux regarder du coté du C et voir la façon avec laquelle ce dernier
peut jouer avec les choses que le Pascal te masque plus ou moins (entier
non signés, pile, passage par adresse, etc), ce qui te permettra *in
fine* de regarder de plus près comment sont foutus les drivers linux.

En aucun cas la programmation objet ne sera utile pour ce que tu veux faire.

sam.
Avatar
bpascal123
En fait, je me dis que le C est devenu un standard du fait que les
principaux auteurs étaient salariés dans des entreprises assez
puissantes pour imposer ses standards (AT&T ou Bell) à une époque où
la croissance était à 2 chiffres..Peut-être je m'avance un peu sans
trop savoir mais les auteurs du K&R étaient salariés et leur ouvrage
appartient (les droits) à l'entreprise pour laquelle ils travaillaient
au moment ou ils l'ont écrit, non?

Je me demande entre autre si aujourd'hui, d'autres ne peuvent pas
imposer des standards (communauté Androîd supportée par Google...par
exemple) ? Mais c'est un autre sujet.

La programmation sur les appareils mobiles (tactiles et autres) avec
les outils disponibles peuvent-elles nécessiter des connaissances du
niveau de la manipulation de bits?
Avatar
espie
In article ,
Samuel DEVULDER wrote:
a écrit :
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?



Oui.. mais en héritage des langages de bas niveau. C'est jugé par les
puristes comme une erreur, car on peut avoir des langages a objets sans
aucune notion de bits explicites (cf Smalltalk où mêmes les booleens
sont des objets).



C'est marrant, quand je regarde mon Squeak, j'y vois des operations de
manipulation de bits sur les entiers, et des Byte, qui sont par exemple
utilises pour lire des images.

Et quand je regarde ces manipulations de bits, ben celles-ci sont marquees
comme implementees comme "primitives" sur les entiers standards.

(et heureusement, parce que ca permet d'avoir une implementation decente
de smalltalk avec du graphique qui tourne a une vitesse raisonnable.
1 2 3 4 5