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

Résolu/Fermé
rodel25 Messages postés 115 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 - 18 mars 2013 à 23:08
Stolous Messages postés 30 Date d'inscription jeudi 14 mars 2013 Statut Membre Dernière intervention 15 septembre 2014 - 21 mars 2013 à 16:58
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 157 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 20 mars 2017 10
Modifié par NiicoDu42 le 18/03/2013 à 23:28
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 19/03/2013 à 08:10
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 115 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 25
19 mars 2013 à 13:09
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 19/03/2013 à 15:25
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 115 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 25
Modifié par rodel25 le 19/03/2013 à 18:07
merci beaucoup pour cette explication claire et précise :)
0
Stolous Messages postés 30 Date d'inscription jeudi 14 mars 2013 Statut Membre Dernière intervention 15 septembre 2014 4
21 mars 2013 à 16:32
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
21 mars 2013 à 16:47
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 30 Date d'inscription jeudi 14 mars 2013 Statut Membre Dernière intervention 15 septembre 2014 4
21 mars 2013 à 16:58
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