Pourquoi la valeur max et min est de 255 et -255

Résolu
rodel25 Messages postés 123 Statut Membre -  
Stolous Messages postés 31 Statut Membre -
Bonjour,

Tout est dans le titre, je programme avec Arduino, langage qui se rapproche du C, j'utilise le robot 3pi qui dispose de 2 moteur 30:1.
Je me demandais pourquoi la valeur max et min sont 255 et -255, un rapport avec le binaire ?

Merci de bien vouloir m'éclairer :)

A voir également:

3 réponses

NiicoDu42 Messages postés 169 Statut Membre 10
 
Je crois que c'est une question de mémoire dédié au type de variable.
int aura une plus faible mémoire qu'un float ...

Donc si tu veux que des nombres positifs, il te suffit de rajouter "unsigned" devant le type de variable

ex :
unsigned int var1;

les possibilités de nombre partent alors de zero jusqu'à 510 dans ton cas (255 x 2)(Tu as remarqué qu'il y avait la même étendu entre 0 -> 510 et -255 -> +255 )

En espérant t'avoir aidé :)
1
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Ce n'est pas 510 mais 511 (2 puissance 9 - 1) la valeur max...

Etvpuis en signed ce n'est pas pas -255 255 mais -256 255.
D'ailleurs dans ton exemple il n'y a pas la même "étendu".
0
rodel25 Messages postés 123 Statut Membre 25
 
Merci pour vos réponse, donc en gros sa dépend de la variable utilisée ?

Car j'ai une petite revue de projet et voici mon (tout) petit programme teste sous Arduino :

#include <OrangutanMotors.h>

void setup()
{
}
void loop()
{
int mot1 = 255
int mot2 = 255
set_motors(mot1, mot2)
}

Et je ne sais répondre a la question : pourquoi la valeur max est de 255 et min -255.

Y a t il un lien avec la précision du robot qui est de 8 bits ? c'est a dire 1111 1111 = 255 ?
1
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Salut rodel25,

La réponse simple, c'est parce que c'est fixé ainsi par la documentation de set_motors() :

https://www.pololu.com/docs/0J18/7

Speed is a value between -255 and +255. The sign of speed determines the direction of the motor and the magnitude determines the speed. A speed of 0 results in full brake (full coast on the Orangutan X2) while a speed of 255 or -255 results in maximum speed forward or backward. If a speed greater than 255 is supplied, the motor speed will be set to 255. If a speed less than -255 is supplied, the motor speed will be set to -255.

Sinon, le type int peut accueillir des valeurs maximales et minimales bien supérieures. Les limites effectives dépendent du type de matériel arduino : https://www.arduino.cc/reference/en/language/variables/data-types/int/

Autrement de 0 à 255, tu as 256 positions possibles pour déterminer la vitesse en marche avant (ou arrière). C'est effectivement égal à 2 puissance 8, ou un octet (donc 8 bits).


Dal
0
rodel25 Messages postés 123 Statut Membre 25
 
merci beaucoup pour cette explication claire et précise :)
0
Stolous Messages postés 31 Statut Membre 4
 
C'est en fair juste une question d'espace dans la mémoire,
car le nombre maximal que on peut stocker dans 4 octets est 255.
-1
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Salut Stolus,

Un octet est un nombre composé de 8 bits, qui peut avoir 256 valeurs différentes (donc une valeur de 0 à 255) : de 00000000 à 11111111, 2 puissance 8, car chaque bit peut avoir deux valeurs uniquement.

Avec 4 octets, tu fais de de 00000000000000000000000000000000 à 11111111111111111111111111111111, et peux stocker 2 puissance 32 valeurs différentes, donc 4294967296. Soit de 0 à 4294967295.

De quoi parles-tu ?


Dal
0
Stolous Messages postés 31 Statut Membre 4
 
désolé, je me suis trompé avec autre chose, c'est bien 1 octet, soit 8 bits, soit en binaire entre 00000000 et 11111111.
Donc merci [Dal]!
0