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.