2017-09-20 4 views
0

Je suis en train d'en apprendre davantage sur les débordements et les sous-flux d'entiers et je me demandais s'il était possible de contrôler la valeur de j en donnant une entrée négative n?Débordement/sous-dépassement d'entier

int i = n; 
size_t j = i; 
printf("%lu",j); 

par exemple, si je veux la valeur de « j » être 255, est-il possible de concevoir le nombre négatif « n » pour me donner cette sortie?

+3

Oui c'est! Vous pouvez mettre 'n' à 255. :-P –

+0

Il n'y a pas de" sous-entier ", Dans la nomenclature généralement acceptée," underflow "ne peut se produire qu'en arithmétique en virgule flottante. Comme votre question, la réponse est simple: il suffit de mettre votre 'n' à' 255'. La simplicité et la trivialité de la réponse font soupçonner que vous avez manqué quelque chose dans votre question. – AnT

+1

Je suis désolé, je voulais dire en donnant une valeur négative. J'ai mis à jour la question –

Répondre

1

Je pense que ce que vous cherchez est

signed char i = -1; 
unsigned char j = i; 
printf("%u\n", j); 

En 8 bits, le nombre -1 signé « enroulé » à la valeur non signée 255.

Vous avez demandé size_t parce que, oui , c'est un type non signé, mais typiquement 32 ou même 64 bits. À ces tailles, le nombre 255 est représentable (et a la même représentation) dans les deux variantes signées et non signées, donc il n'y a pas un nombre négatif qui correspond à 255. Mais vous pouvez certainement voir des effets similaires, en utilisant des valeurs différentes. Par exemple, sur une machine avec des nombres de 32 bits, ce code:

unsigned int i = 4294967041; 
int j = i; 
printf("%d\n", j); 

est susceptible d'imprimer -255. Cette valeur vient parce que 2^32 - 255 = 4294967041.

+0

Dans ce dernier code, le comportement est défini par l'implémentation (et peut générer un signal) –