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

comment on manipule des bits?

caelacanthe
caelacanthe
Niveau 10
29 septembre 2008 à 21:44:57

:salut:

je suis en train de faire un nouveau programme pour qui les octets, c'est trop gros :mort:

donc j'aimerais savoir comment on manipule les bits d'un char ou d'un byte, si on peut les lire ou les changer, etc...

il y a des opérateurs pré-existants en c-c++? :merci:

SEK3
SEK3
Niveau 6
29 septembre 2008 à 22:10:54

Avec des masques et des décalages:

char c, c2;

c = c | 4; // met le 3ème bit de poids faible de c à 1
c2 = (c & 8) >> 3; // récupère le 4ème bit de poids faible de c

dnob700
dnob700
Niveau 10
29 septembre 2008 à 23:40:55

Tu peut utiliser la classe bitset :

  1. include <bitset>

using namespace std;

...

bitset<30> s; // crée un bitset de 30 bits.
s.set(10); // mets le bit 10 à 1
s.get(5); // récupère la valeur du bit 5.
etc.

caelacanthe
caelacanthe
Niveau 10
29 septembre 2008 à 23:43:04

merci beaucoup :ok:

une question dnob007, on peut écrire des bitsets dans des fichiers :question:

ou les convertir en octets, justement pour les écrire?

guyver2
guyver2
Niveau 10
30 septembre 2008 à 08:45:59

je suis pas du tout un habitué du C++ mais il me semble que la méthode get n'existe pas pour la classe bitset.

http://www.cppreference.com/wiki/stl/bitset/start

c'est "test" et non "get" à mon avis.

pour ce qui est d'ecrire les bitsets dans un fichier je pense que le mieux c'est de les prendre 8 par 8 et de les ecrire sous forme de char dans un fichier binaire.

godrik
godrik
Niveau 30
30 septembre 2008 à 10:12:42

regarde si l'opérateur << n'a pas été redéfini pour les bitset.

dnob700
dnob700
Niveau 10
30 septembre 2008 à 16:30:29

Si c'est redéfini, ça risque d'être le décalage bit à bit et non pas l'opérateur de flux (une bonne illustration du fait que ces opérateurs sont mal choisis).

godrik
godrik
Niveau 30
01 octobre 2008 à 11:08:22

ils sont en effet mal choisi
mais tu peux redéfinir std::ostream& operator<< (std::ostream& , std::bitset& ); qui correspond a l'opération que tu veux et qui n'est pas en conflit avec le décalage a gauche.

[G3X]
[G3X]
Niveau 2
01 octobre 2008 à 18:07:56

http://www.siteduzero.com/tutoriel-3-32150-les-operateurs-bits-a-bits-employes-sur-des-nombres-entiers.html

caelacanthe
caelacanthe
Niveau 10
01 octobre 2008 à 20:30:45

ah? attendez une minute!

je lis dans le lien de [G3X] que:
"
| qui renvoie 1 si un des deux bits comparés contient un 1 ou si les deux le contiennent. (on l'appelle le "ou inclusif")
^ qui renvoie 1 si et seulement si les deux bits sont différents. (on l'appelle le "ou exclusif")
& qui renvoie 1 si les deux bits valent tous les deux 1. (on l'appelle le "et")

Quand ils ne renvoient pas 1, ils renvoient 0. Ne rigolez pas, ce n'est pas "logique", ils auraient très bien renvoyer une valeur du style de NULL.

Par exemple 2 ^ 3 va renvoyer 1 car :
"

ca veut dire qu'en utilisant des opérateurs logiques, je peux lire les bits de structures simples comme le char, etc :question:

car j'aimerais essayer d'éviter d'utiliser des classes supplémentaires le plus possible :rire2:

et utiliser les masques & décalages pour écrire les bits...

merci beaucoup :merci:

dnob700
dnob700
Niveau 10
01 octobre 2008 à 21:01:23

Oui tu peut, et ça marche très bien si tu n'a pas besoin d'un grand nombre de bits.

dnob700
dnob700
Niveau 10
01 octobre 2008 à 21:03:50

(j'étais en train de nettoyer mon clavier, et le post est partit tout seul ...)

Mais ne C++, c'est moins propre que d'utiliser une classe prévu pour (qui sera tout aussi efficace, voire plus) car la manipulation de bits c'est toujours un peu crade et c'est donc une grande source d'erreurs. Tu les évite en utilisant une classe où toute la saleté est encapsulé.

onizuka78
onizuka78
Niveau 7
05 octobre 2008 à 21:00:23

Ces du C ou C++ que tu fait ?

caelacanthe
caelacanthe
Niveau 10
05 octobre 2008 à 21:23:43

euh... un peu des deux, à vrai dire :(

surtout du C, les classes et les objets du c++ j'ai pas tellement vu :ok:

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