类型提升和不同类型计算时的痛点和难度

目录

1.运算时的类型提升(发生在同类型计算下)

1)首先我们先看一段代码

2)再来看一段代码

3)再来看一段代码

2.不同类型计算

1)看一段代码猜结果

2)再看一段代码猜结果


1.运算时的类型提升(发生在同类型计算下)

1)首先我们先看一段代码

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

运行结果:0;

这是为什么呢?我们来分析一下,unsigned char 的取值范围是【0,255】,二进制表示形式为11111111,正好占满了所有的内存,而256的二进制为10000000,我们来比较一下                           11111111                                                                                                                                            10000000                                                                                                                                             这里会发生截断,也就是最终只保留了00000000,所有运行结果是0;

2)再来看一段代码

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

运行结果:255;

分析:

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

3)再来看一段代码

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

运行结果:-124

其实float进行运算时会转化为double进行运算,这个大家可以自己动手试试

2.不同类型计算

规则:

char , short ,int 都是整形家族

char和int运算转化为int 运算

int 和float运算转化为double运算

double和int运算转化为double运算

1)看一段代码猜结果

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

运行结果:0.000000

这个大家是不是会很简单的得出结果,因为a和3都是整形,所以小数点后的值是不会进行计算,因此最后的结果就是0;

2)再看一段代码猜结果

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

运行结果:0.666667

大家应该也能猜猜出来了,因为float和int进行运算时,int会被强转为float,所以小数点是会进行运算,所以最后的结果是0.666667。

可能大家会觉得,这些都是一些小知识,那有什么难度,但越是这样,我们越容易在这个上面出错,当我开始很多题之后,发现有时候卡住我的并不是那些很难掌握的知识点,而是那些我平时忽略的那些细节知识,那些错误经常让我摸不着头脑,神出鬼没,让我总以为是电脑或者自己做题目做糊涂了,因此,我们更要重视那些细节和小知识。

猜你喜欢

转载自blog.csdn.net/m0_74316391/article/details/130714695