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

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



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。

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

相关文章
|
10月前
|
存储 JSON 数据库
HarmonyOS Next 端云一体化(2)
本文介绍了HarmonyOS云数据库端云一体化中的数据库操作流程。首先创建名为“Study”的存储区,并在DevEco Studio中配置信息;接着定义对象类型,以“Book”为例,详细说明objectTypeName、fields、indexes和permissions的设置规则;然后通过JSON文件添加数据条目,配置cloudDBZoneName和objects字段;最后将本地数据库部署至AGC平台并刷新数据。全文涵盖存储区创建、对象类型定义、数据操作及云端部署等核心步骤,为端云协同开发奠定基础。
305 5
HarmonyOS Next 端云一体化(2)
|
前端开发 JavaScript Python
CPM、CPC
【6月更文挑战第24天】
1514 13
|
10月前
|
存储 人工智能 Cloud Native
小鹏汽车选用阿里云PolarDB,开启AI大模型训练新时代
PolarDB-PG云原生分布式数据库不仅提供了无限的扩展能力,还借助丰富的PostgreSQL生态系统,统一了后台技术栈,极大地简化了运维工作。这种强大的组合不仅提高了系统的稳定性和性能,还为小鹏汽车大模型训练的数据管理带来了前所未有的灵活性和效率。
|
Linux C语言 C++
Linux 下centos 查看 -std这个编译时命令 是否支持 C17
Linux 下centos 查看 -std这个编译时命令 是否支持 C17
443 2
|
存储 自然语言处理 语音技术
Transformers 4.37 中文文档(七十九)(3)
Transformers 4.37 中文文档(七十九)
264 1
|
机器学习/深度学习 人工智能 JavaScript
探索后端开发的未来趋势
本文将带您一起探讨后端开发的未来发展。我们将从当前流行的技术框架出发,分析其发展趋势,并预测可能出现的新技术。同时,我们还将讨论如何提升后端开发的效率和质量,以及如何应对未来可能出现的挑战。
|
存储 分布式计算 资源调度
|
SQL 资源调度 关系型数据库
StarRocks 【新一代MPP数据库】(5)
StarRocks 【新一代MPP数据库】
|
搜索推荐 前端开发 JavaScript
深入理解后端开发中的服务端渲染(SSR)技术
在现代Web开发领域,服务端渲染(Server-Side Rendering, SSR)技术因其独特的性能优化和SEO优势而受到重视。本文将探讨SSR的工作原理、实现方法及其与客户端渲染(CSR)的比较,同时分析SSR在现代Web应用中面临的挑战和解决方案。通过实例分析,我们将深入了解SSR如何提升用户体验和提高搜索引擎排名,以及开发者如何在项目中有效实施SSR。
|
存储 搜索推荐 网络协议
Everything+cpolar内网穿透轻松实现公网远程访问本地硬盘文件
Everything+cpolar内网穿透轻松实现公网远程访问本地硬盘文件
296 0