Operateur<< en C

Fermé
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 - 23 nov. 2009 à 10:22
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 23 nov. 2009 à 17:14
Bonjour,

j'aimerai utiliser l'opérateur binaire << sur un double.

pour un int je fais cela:

int main(){

    int x=9;

    printf("%d\n",(x<<1));

    return 0;
}


alors pour un double j'avais essayé :

int main(){

    double x=9;

    printf("%f\n",(x<<1));

    return 0;
}

j'ai eu cette erreur: erreur: invalid operands to binary << (have ‘double’ and ‘int’)
cela ne marche pas, donc j'ai voulu caster...

int main(){

    double x=9;

    printf("%f\n",(x<<(double)1));

    return 0;
}


mais j'ai cette erreur: erreur: invalid operands to binary << (have ‘double’ and ‘double’)


Alors comment utiliser l'opérateur << avec un double?

merci d'avance pour vos réponses

7 réponses

toto1983 Messages postés 205 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 25 mars 2010 13
23 nov. 2009 à 10:55
Essaie de faire un transtypage (conversion en int de ta variable double)

double mavariable;
int mavariableint;

mavariableint = (int) mavariable;
tu traite 'mavariableint', voilà ;)

Si ça marche pas on verra ensemble le problème
0
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
23 nov. 2009 à 11:26
oui d'accord mais cela me pose un petit soucis...

j'aimerai utiliser un double car c'est sur 8 octets contrairement à un int ou un long qui sont sur 4 octets.

Donc par exemple j'ai un entier égal à 1

en binaire on a: 0000 0000 0000 0000 0000 0000 0000 0001 pour un double
0000 0000 0000 0001 pour un int

et j'aimerai mettre le bit à 1 tout à gauche. si je traite un int ça me rendra 1000 0000 0000 0000.

donc si ensuite je fais mavariable = mavariableint, ça me donnerai 0000 0000 0000 0000 1000 0000 0000 0000.


D'où le soucis... je veux juste décaler les bits d'un double mais j'ai l'impression que l'on ne peux pas utiliser les opérateurs binaires directement sur un double.
Donc la solution qui me viendrai à l'esprit c'est de travailler sur un int comme tu l'as suggérer mais il faudrai concaténer à un autre (ici ça serait int1= 1000 0000 0000 0000 et int2=0000 0000 0000 0000) mais je ne vois pas comment faire...
0
toto1983 Messages postés 205 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 25 mars 2010 13
23 nov. 2009 à 11:32
Tu crois pas si bien dire :/ ...

"Ce sont des opérateurs que l'on trouve plus souvent dans les langages d'assemblage que dans les langages de haut-niveau. On retrouve toutes (ou presque) les opérations de manipulation de bits possibles. Elles ne s'appliquent pas, bien entendu, aux float et aux double"

source : http://handy.univ-lyon1.fr/service/cours/lamot/node40.html

Après je suis sur que tu es sur la bonne voie, mais essaie de voir des tutoriels afin de maîtriser les types et leurs intéractions . Moi dsl g pas trop le time, je t'aurais aidé avec plaisir
0
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
23 nov. 2009 à 11:35
ok merci, je vais voir ça. Je mettrai la solution si je la trouve ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
toto1983 Messages postés 205 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 25 mars 2010 13
23 nov. 2009 à 11:36
Ouais merci, pasque moi j'apprends plutôt des erreurs des autres ;)
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
23 nov. 2009 à 15:28
Ne vous est-il pas venu à l'esprit qu'il existe plusieurs espèces d'int ?
On trouve des courts appelés 'short', des normaux et des longs.
Sur nos machines, on a donc la possibilité d'avoir des longueurs de 2, 4 ou 8 octets. Cela pourrait peut-être résoudre le problème.
Bonne continuation.
0
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
23 nov. 2009 à 16:29
Oui j'y ai pensé, mais les int et les long font 4 octets tous les deux ( sur ma machine en tous cas )...
le seul à atteindre 8 octets est le double.
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
23 nov. 2009 à 17:14
Oui souvent les longs sont comme les normaux... mais il y a aussi les super longs.
As-tu essayé des 'long long' ou 'long long int' ?
Bonne soirée.
0