Points faibles et difficultés liés à la promotion de type et aux différents types de calculs

Table des matières

1. Promotion de type pendant le fonctionnement (se produit dans les calculs du même type)

1) Tout d’abord, regardons un morceau de code

2) Regardons à nouveau un morceau de code

3) Regardons à nouveau un morceau de code

2. Différents types de calculs

1) Regardez un morceau de code et devinez le résultat

2) Regardez un morceau de code et devinez le résultat


1. Promotion de type pendant le fonctionnement (se produit dans les calculs du même type)

1) Tout d’abord, regardons un morceau de code

unsigned char c=256;
printf("%d",c);

Résultat d'exécution : 0 ;

Pourquoi est-ce? Analysons-le. La plage de valeurs du caractère non signé est [0, 255] et la représentation binaire est 11111111, ce qui occupe toute la mémoire, tandis que la valeur binaire de 256 est 10000000. Comparons-la avec 11111111 10000000. Il y aura soit troncature ici.C'est-à-dire que seul 00000000 est conservé à la fin, et tous les résultats en cours sont 0;

2) Regardons à nouveau un morceau de code

unsigned char c=-1;
printf("%d",c);

Résultat courant : 255 ;

analyser:

-1 源码:10000001
   反码:11111110
   补码:11111111  //在无符号char类型下它的结果就是255

3) Regardons à nouveau un morceau de code

char a = 5;//    00000000000000000000000000000111(运行时会进行整形提升)
	char b = 127;//  00000000000000000000000001111111
	char c = a + b;//00000000000000000000000010000110 先截断10000110(符号位是1,是负数,转化为源码=-124)
	printf("%d", c);

Résultat en cours d'exécution : -124

En fait, lorsque float est utilisé pour le calcul, il sera converti en double pour le calcul. Vous pouvez essayer cela vous-même.

2. Différents types de calculs

règle:

char, short, int sont toutes des familles entières

les opérations char et int sont converties en opérations int

Convertir les opérations int et float en opérations doubles

Les opérations doubles et int sont converties en opérations doubles

1) Regardez un morceau de code et devinez le résultat

int a=2;
printf("%f",a/3);

Résultat d'exécution : 0,000000

Tout le monde obtiendra-t-il le résultat facilement, car a et 3 sont des nombres entiers, donc la valeur après la virgule ne sera pas calculée, donc le résultat final est 0 ;

2) Regardez un morceau de code et devinez le résultat

float b=2;
printf("%f",b/3);

Résultat courant : 0,666667

Vous devriez pouvoir le deviner, car lorsque float et int sont utilisés, int sera forcé de flotter, donc le point décimal sera calculé, donc le résultat final est 0,666667.

Vous pensez peut-être qu'il s'agit de quelques petites connaissances, alors quelle est la difficulté, mais plus c'est le cas, plus il nous est facile de faire des erreurs à ce sujet. Après avoir commencé beaucoup de questions, j'ai trouvé que parfois ce qui restait coincé moi, ce n'étaient pas ceux qui étaient difficiles à maîtriser. Les points de connaissance, mais les connaissances détaillées que j'ignore habituellement. Ces erreurs me rendent souvent confus et insaisissable, me faisant toujours penser que c'est l'ordinateur ou que je suis confus quand je réponds aux questions. C'est pourquoi nous devons accorder plus d'attention à ces détails et à ces petites choses.

Je suppose que tu aimes

Origine blog.csdn.net/m0_74316391/article/details/130714695
conseillé
Classement