Vous n'êtes pas identifié.
J'ai vu que dans le language C, que la variable char occupe 1 octect alors que int occupent 2 octect. Et vu qu'il est possible de stocker des entier dans une variable char je me demandai kel est l'intervalle de valeur admise par la varriable char ? Surment plus restreint que pour int, mais combien ?
Hors ligne
alors:
int: -32767 à 32767
unsigned int: 0 à 65535
char: -127 à 128
unsigned char: 0 à 255
Hors ligne
héhé récemment je me suis demandé pourquoi mon prog bouclait sans cesse, jusqu'a ce que je tombe sur ceci
unsigned char i; ... for (i=0;i<300;i++)... ;
je pouvais toujours attendre qu'il sorte de la boucle for... :twisted:
Hors ligne
ca m'est arrivé aussi !!! :twisted: :twisted:
Hors ligne
un char c'est 8 bits 2^8 possibilités de nombres.
un int c'est 16 bits 2^16 possibilités de nombres.
un unsigned int utilisera 16 bits tandis qu'un int n'utilisera que 15 bits, le 16ème étant le bit de signe.
pareil pour un unsigned char et un char sauf que c'est le 8ème qui sert de bit de signe.
etc...
Hors ligne
alors:
int: -32767 à 32767
unsigned int: 0 à 65535
char: -127 à 128
unsigned char: 0 à 255
c po plutot de -127 a 127 ???
Hors ligne
bon là je convertis
bon ben -128 en hexa ça fait 1$80, et 128 ça fait 0$128.
-127 c 1$81....
à mon avis ça doit être une erreur dans la doc de TC...
Hors ligne
OK alors si j'ai bien compris je gagne un peu de place a mettre un char au lieu d'un int et aussi en rapidité d'exécution(méme si c'est infime)?
Hors ligne
C'est bien de -127 a 128 et de -32767 à 32768
Pour convertir, il faut utiliser le complément à 2:
-Si le nombre est positif et <= 128, il est codé tel quel
-Si le nombre est négatif, inverser tous les bits de la valeur absolue et ajouter 1
Cette technique a plusieurs avantages :
-le 0 n'est pas codé 2 fois (si le premier bit était un bit de signe, on aurait 0 et -0)
-l'addition d'un positif et d'un négatif se fait comme l'addition de 2 positifs
Exemple:
128 est codé en :
1000 0000
-127 :
valeur absolue : 0111 1111
on inverse tous les bits: 1000 0000
on ajoute 1: 1000 0001
-127 se code en 1000 0001
Adition des 2:
1000 0000
+1000 0001
___________
10000 0001
Le dernier bit dépasse les 8 bits, le microprocesseur le supprime.
Le résultat de l'addition est donc 0000 0001
Or 128 + -127 = 1
Même chose pour les int, sauf qu'il y a 16 bits
Hors ligne
ben si tu utilise que quelques vars int ou u_int, ben ça fait presk rien, alors que si tu as des très gros tableaux de données là ça joue énormément! un tab de 50 "sous-tabs" en unsigned int prend 10Ko de moins que le même mais déclaré en unsigned long!!!
donc si t'as tout plein de variables fais la conversion, mais fais aussi bien attention aux valeurs maximales des variables, sinon il pourrait t'arriver des sales choses! mais parfois kan tu mets un unsigned char et ke tu testes s'il est négatif ben TC te met un warning ac "case is always false". donc u_int->u_char et int->char, en général.
voila!
Hors ligne
ah voila!
j'avais oublié de rajouter 1 après avoir complémenté! ( put1 le cancre ac les cours d'élec juste à côté! :lol )
Hors ligne
A ok merci je suis entrain d'apprendre le C mais avec les cours et les bouquin a lire c'est pas facile. Enfin les cours j'exagère un peu fo pas pourssé je suis juste en seconde je peux pas dire que je suis déborder. Je ne suis pas encore a votre stade. Bon j'ai raconter ma vie, j'en suis désoler surtout pour rien dire, je devais me sentir seul... :-(
Hors ligne
vous le sortez d'ou que un int c'est 16 bits. Normalement ca dépend de la machine ??? vous l'avez trouvé ou l'info ?
Hors ligne
un int ca dépend pa plutot du compilo, si il l'interpret en short ou en long...??
Hors ligne
non en fait un int c'est un mot machine.
Sur notre NEC V30Mx un mot machine c'est 16 bits, sur un PC c'est 32bits et comme l'a dit Ktr ça dépend du compilateur comme TC est vieux il ne connaît que le cpu 16 bits.
Hors ligne
Ah c cool desfois de ne pa dire ke des conneries ...
Hors ligne
ben oui, et comme le dit 2072, les mots machine comme "long" ben ils sont émulés!
et aussi KTr, un short c pareil qu'un int!
Hors ligne
Non un short c'est toujours 16bits, quelque soit la machine.
Hors ligne