在C中有各样的数据类型,当不同的数据类型放在一起进行处理时,总会有一个“标准”来要求不同的数据进行相同的处理从而完成任务,本文主要分享C中的一种法则:截断与提升,我们举个栗子:

#include<stdio.h>
{char a = 3;char b = 127;char c = a + b;printf("%d\n",c);//打印出的结果为-126return 0;
}

我们可以看到:

对于字符型数据a、b、c我们以整型的格式进行打印,打印出来的数字并不是127+3 = 130,而是-126这个看似很突兀的数,固然我们可以用char类型数据存储范围最大为128,130溢出了来理解,但是显然这并不严谨,所以我们接下来介绍正确的理解方式:

首先对于一个正数来说,计算机存储的是该数字的原码(正数原码、反码、补码都相同)所以:

a —— 00000011

b —— 01111111

c = a + b,这里我们必须知道:

·在表达式计算时,各种整型会一律转化为int类型,称整型提升。(int类型数据不够用时提升为unsigned int)

·整型提升原则:按照符号位将不足的位补足。

所以在运算c = a + b时,会发生如下事情:

a —— 00000011 进行整型提升(符号位为0):

00000000 00000000 00000000 00000011

b —— 00111111 进行整型提升(符号位为0):

00000000 00000000 00000000 01111111

接下来直接进行直接运算:

00000000 00000000 00000000 10000010 该段数据即为c

我们知道c是一个char类型,而char类型的数据只有一个字节(8位),而整型提升得到的c有4个字节(32位),所以我们必须再进行处理,将该int数据“强行塞入”char内,称为“截断”

·截断:在原数据末尾开始直接按照所需数据大小拿走所需数据

00000000 00000000 00000000 10000010

以上4个字节中,我们只需要1个字节大小就够,所以我们取走最后8位(一个字节),得到:

10000010 - 该数据即为c

接下来我们以整形的形式进行打印,那么问题又会出现:

char类型怎样以int型输出呢?

答案很简单:进行整型提升。将该类型提升为整形即可。

10000010 符号位为1,所以提升后为:

11111111 11111111 11111111 10000010

这里我们需要注意:该数据第一位(符号位)为1,所以是负数,负数在计算机中存储的是补码,所以我们还要进行还原:

11111111 11111111 11111111 10000010 -补码

11111111 11111111 11111111 10000001 -反码

10000000 00000000 00000000 01111110 -原码

该大小即为-126。

到这里我们就介绍完了整形提升与截断的相关概念。

~~~~点赞加关注,学C不迷路~~~~~~~~

C语言——整型的截断与提升相关推荐

  1. [C语言]——整型的截断与提升

    什么是截断与提升? 简单来说,截断是将所占字节大的元素赋给所占字节小的元素时会出现数值的舍去现象:提升是将占字节小的元素赋给占字节大的元素时出现的补位现象. 举个例子: int val=1;//int ...

  2. C进阶指南(1):整型溢出和类型提升、内存申请和管理(转)

    转自:http://blog.jobbole.com/72830/ C语言可用于系统编程.嵌入式系统中,同时也是其他应用程序可能的实现工具之一. 当你对计算机编程怀有强烈兴趣的时候,却对C语言不感冒, ...

  3. c语言8个字节整形数,C语言整型数据分析

    C语言整型数据分析 不同类型的量可以参与运算并相互赋值.其中的类型转换是由编译系统自动完成的.以下是小编为大家搜索整理的C语言整型数据分析,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考 ...

  4. c语言整型转换时截断危险,网易云课堂_艾叔:零基础一站式C语言|C程序设计精讲_章节5整型_课时41整型转换、扩展与截断(示例代码)...

    扩展: char src; int dst; dst = (char)src; src有符号,扩展位=符号位,符号位0扩展位也是0,符号位1扩展位也是1 src无符号,扩展位=0 截断: int sr ...

  5. 3字节转换为有符号整型C语言,3.C语言整型数据

    # 3.C语言整型数据 整型量包括整型常量.整型变量. ## 整型常量的表示方法 整型常量就是整常数.在C语言中,使用的整常数有八进制.十六进制和十进制三种. 1) 十进制整常数 十进制整常数没有前缀 ...

  6. C语言除法浮点型和整形,浅谈C语言整型与浮点型转换

    本篇博客将阐述.讨论的内容: ●int int的范围根据计算机的不同存在16位或32位的差异,以16位举例,最大值为1111 1111 1111 1111,也就是65535,如果出现65536,就会溢 ...

  7. c语言整型数据类型及存储形式详解

    c语言基本数据类型 整型 基本整型(int) 短整型(short int) 长整型(long int) *双长整型(long long int) 字符型(char) 布尔型(bool) 无符号型详解 ...

  8. c语言整型最大数,C语言:求一个短整型正整数中的最大数字

    C语言:求一个短整型正整数中的最大数字 关注:84  答案:5  手机版 解决时间 2021-01-16 02:17 提问者舊倳偂歡 2021-01-15 14:26 例如整数12354中的最大数字是 ...

  9. C语言整型,浮点型数据储存的超详细讲解

    数据类型 整型 浮点型(实型) 写在最后的话 我们都知道C语言有很多数据类型,如char ,int ,double 等等,本篇博客我们来梳理分类一下这些数据类型,首先我们可以将数据类型分为两类,整型和 ...

最新文章

  1. 看生物信息学如何聚焦特定表型,探索分子机制,促进临床转化
  2. mui栅格布局的两种方式(grid和list,宫格和列表)
  3. sql int 比较_SQL进阶--错题集1
  4. PTA 程序设计天梯赛(81~100题)
  5. 管理学基础 形成性考核一
  6. 181024词霸有道扇贝每日一句
  7. 2019杭州云栖大会探营:神龙的秘密
  8. 域名备案和网站备案是一个意思吗?
  9. win7怎么查看计算机主板,win7怎么看主板型号 win7看主板型号方法【图文】
  10. 关于cosine_similarity参数的问题
  11. 域名被微信拦截怎么办?
  12. ArcGIS——dwg与shp转换原理
  13. python保留两位小数_python格式化输出保留2位小数的实现方法
  14. 如何获取Java运行时的性能数据
  15. 将Eclipse设置为中文
  16. vbox连接Ubuntu18.04
  17. 转载随机数的两种操作方法
  18. 安卓手机投屏软件_苹果安卓手机投屏之(一)——视频和桌面
  19. 视频网站中的推荐系统
  20. 2022年TI杯模拟电⼦系统设计专题邀请赛——李萨如图形演示装置

热门文章

  1. AI语音电销自动机器人让电销更轻松更高效!
  2. 电销业绩就是这样做起来的
  3. swift5 Notification
  4. python解压7z文件_Python调用7zip命令实现文件批量解压
  5. web上传zip大文件,java服务接收并解压ZIP文件
  6. 计算机网络——物理层(数字传输系统)
  7. jcs开源缓存框架介绍
  8. Oracle APEX 系列文章3:在阿里云上打造属于你自己的APEX完整开发环境 (安装CentOS, Tomcat, Nginx)...
  9. JS - 获取选中复选框的值(checkBox)
  10. 农村出身,半路测试转开发,他一路升级打怪到华为19级B