Titre: [C] erreur: conversion d'un nombre en binaire Posté par: Sarcadent le 04 Novembre 2015 à 16:56:28 Hello, je me suis amusé a faire un code pour afficher la valeur d'un nombre en binaire cependant mon code ne marche qu'avec des unsigned int.
Lorsque j'utilise des int le motif binaire affiche des -1 à la place des 1. Es ce que vous aurez une idée de pourquoi? Code: #include <stdio.h> Ps: je me suis dis que c'était surement à cause de la représentation d'un entier signé en binaire avec le dernier bit mais je ne me l'explique pas vraiment Cordialement Sarcadent Titre: Re : [C] erreur: conversion d'un nombre en binaire Posté par: pixis le 04 Novembre 2015 à 17:25:22 Hey there.
On pourra compléter ma réponse, mais personnellement, j'aurais fait comme ceci : Code: #include <stdio.h> En effet, lors du shifting des bits, il est important de s'assurer que les bits qui "dépassent" soient bien égaux à 0 (ce que je fais en faisant un ET logique avec la taille limite d'un int sur 32 bits). C'est pas générique, mais ça donne l'idée. Moche, mais ça a le mérite de fonctionner :rolleyes: Titre: Re : [C] erreur: conversion d'un nombre en binaire Posté par: Sarcadent le 04 Novembre 2015 à 21:42:05 merci beaucoup :) oui faut effectivement vérifier les bits qui sont ajoutés.
je l'ai refais avec un masque ce qui revient à ce que tu as fais :) Code: #include <stdio.h> Titre: Re : [C] erreur: conversion d'un nombre en binaire Posté par: harvey le 06 Novembre 2015 à 07:03:14 Citation de: Pixis En effet, lors du shifting des bits, il est important de s'assurer que les bits qui "dépassent" soient bien égaux à 0 Il n'y a pas de bits qui dépassent, un entier a toujours le même nombre de bits après un shift. Ce qui se passe dans ton code, c'est que le littéral 0xffffffff est un unsigned int, et que le & entre un int et un unsigned int renvoie un unsigned int. D'ailleurs avec un unsigned int j=0, un "|j" a le même effet (voir "conversions arithmétiques habituelles"). Le résultat de l'expression, un unsigned int, est ensuite imprimé comme un int.Dans le premier code de Sarcadent, le problème est que l'opérateur << est susceptible de changer le signe, tandis que >> le conserve (voir "complément à deux"). Titre: Re : [C] erreur: conversion d'un nombre en binaire Posté par: pixis le 06 Novembre 2015 à 10:18:44 Merci pour la correction de ma bêtise et pour les informations !
|