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

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



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。

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

相关文章
|
3月前
|
存储 监控 Serverless
函数计算发布功能问题之用户在使用主流函数计算产品的日志服务时可能会遇到使用成本的问题如何解决
函数计算发布功能问题之用户在使用主流函数计算产品的日志服务时可能会遇到使用成本的问题如何解决
|
3月前
|
存储 数据挖掘 大数据
深度解析Hologres计算资源配置:如何根据业务场景选择合适的计算类型?
【8月更文挑战第22天】Hologres是一款由阿里云提供的分布式分析型数据库,支持高效的大数据处理与分析。本文通过电商优化商品推荐策略的案例,介绍了Hologres中的计算组型与通用型配置。计算组型提供弹性扩展资源,适合大规模数据及高并发查询;通用型则适用于多数数据分析场景,具备良好计算性能。通过实例创建、数据加载、计算任务建立及结果查询的步骤展示,读者可理解两种配置的差异并根据业务需求灵活选择。
47 2
|
4月前
|
编译器 C++ 运维
开发与运维函数问题之函数的返回类型如何解决
开发与运维函数问题之函数的返回类型如何解决
35 6
|
4月前
|
存储 调度 数据库
软件研发核心问题之数据从哪里来,主要包括哪些类型的数据的问题如何解决
软件研发核心问题之数据从哪里来,主要包括哪些类型的数据的问题如何解决
|
3月前
|
存储 人工智能 算法
高质量存储力发展问题之“存储即平台”的定义如何解决
高质量存储力发展问题之“存储即平台”的定义如何解决
12 0
|
3月前
|
存储 NoSQL 关系型数据库
EAV模型(实体-属性-值)的设计和低代码的处理方案(1)
EAV模型(实体-属性-值)的设计和低代码的处理方案(1)
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
|
12月前
游戏行业术语解决及数据计算方式
游戏行业术语解决及数据计算方式
91 0
|
存储 机器学习/深度学习 自然语言处理
【算法的特性,标准,时间维度空间维度计算方式】
【算法的特性,标准,时间维度空间维度计算方式】
281 0
【算法的特性,标准,时间维度空间维度计算方式】
|
测试技术
【类型挑战】获取函数返回类型,难度⭐️⭐️
【类型挑战】获取函数返回类型,难度⭐️⭐️
143 0
【类型挑战】获取函数返回类型,难度⭐️⭐️