首页 > 其他分享 >C语言之整型提升

C语言之整型提升

时间:2023-03-12 19:31:41浏览次数:40  
标签:00000000 补码 C语言 char 提升 printf sizeof 整型

一、什么是整型提升

如果用一句话来说明整型提升那就是:只要是char类型和short类型的数据,     并且被使用或者说是只要参与运算,那么它们就会发生整型提升,被转化为普通整型

二、怎么整型提升

就一句话,无符号数补0,有符号数补符号位的数(符号位是0则补0,是1则补1)

三、实例说明

3.1牛刀小试

char a=1;char b=-1;char c=a+b;

根据以上代码现在c的结果是多少呢? 

a和b都是有符号的char类型数据,在c=a+b这个表达式中,a和b都参与了运算,所以要发生整型提升

a的补码为 00000001 整型提升后要转换为32个比特位的int类型,而a此时只有8位,又因为a的符号位是0,所以其他位要补0,最终a整型提升后的补码为:00000000 00000000 00000000 00000001

b的补码为 11111111 ,道理同a,不过a的符号位是1,所以其余位要补1,最终b的补码为:11111111 11111111 11111111 11111111

a+b的补码为 00000000 00000000 00000000,

而c的类型是char类型,它只有8个比特位大小的空间,因此a+b的补码被截断,只有后八位被存入c中,也即是 c=0

3.2初露锋芒

char a=1;
printf("%u \n",sizeof(a));
printf("%u \n", sizeof(+a));
printf("%u \n",sizeof(-a));

毫无疑问,sizeof(a)的结果就是1,但是sizeof(+a)就不同了,a是char类型数据,并且被使用了,使用它会发生整型提升转化为整型,整型占四个字节,所以第二个结果是4,sizeof(-a)和sizeof(+a)完全相同,结果如下:

C语言之整型提升_补码

3.3轻松收尾

char a = 0xb6;
short b = 0xb600
int c = 0xb6000000;
if(a==0xb6)printf("a");
if(b==0xb600)printf("b");
if(c==0xb6000000)printf("c");


上述代码只有成功打印,原因很简单 ,就两点,a和b分别是char,short类型的数据,并且它们都被使用了(if语句里的判等),所以它们会发生整型提升,自然会不同,而c本身是int类型,毫无影响,结果如下:

C语言之整型提升_整型_02





标签:00000000,补码,C语言,char,提升,printf,sizeof,整型
From: https://blog.51cto.com/u_15466618/6116250

相关文章

  • pairwise损失_triplet损失_提升精排模型的trick
    多标签importtorchimporttorch.nnasnnimporttorch.optimasoptimclassRankModel(nn.Module):def__init__(self,num_features):super(RankMode......
  • C语言中的const
    C语言中的constconst修饰的全局变量保存在常量区,不可通过任何方式改变其值const修饰的全局变量链接属性为外部链接属性const修饰的局部变量保存在栈区,不可通过变量名直......
  • Windows提权 - 权限提升
    在渗透测试期间,您通常可以通过非特权用户访问某些Windows主机。非特权用户将拥有有限的访问权限,仅包括他们的文件和文件夹,并且无法在主机上执行管理任务,从而阻止您完全控......
  • 插值查找——C语言描述
    插值查找——C语言描述目录插值查找——C语言描述0测试用例框架1定义2代码4测试用例0测试用例框架https://blog.csdn.net/m0_59469991/article/details/127137119?......
  • 如何通过外贸网站SEO优化,提升您的品牌曝光度和海外业务销售额?
    随着全球化的不断推进和互联网的普及,越来越多的外贸企业开始重视SEO优化,以提升自身品牌的曝光度和海外业务的销售额。但是,对于许多外贸企业而言,SEO优化似乎是一个非常陌生的......
  • C语言读写表格文件
    1.csv文件简介  逗号分隔值(Comma-SeparatedValues,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是......
  • 使用整型 int 来统计学生人数
    使用Java的集合类java.util.ArrayList存储多个学生对象理解默认构造函数学习如何利用J2SEAPI文档,理解如何使用java.util.ArrayList限定java.util.ArrayList......
  • c语言 -我与letcode相爱相杀
    有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。1.两数之和给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 ......
  • 我的c语言笔记
    1.进制转换二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。如:1010.1101=1×23 +0×22 +1×21 +0×20 +1×2-1 +1×2-2 +0×2-3 +1......
  • 数据库如何提升读写性能?
    以下是一些可以提升MySQL读性能的方法:使用索引:在查询频繁的列上创建适当的索引,可以大大提高查询速度。使用缓存:可以通过使用MySQL自带的查询缓存或者第三方缓存工具,如Me......