精华内容
下载资源
问答
  • 整型提升
    2022-06-22 16:12:22

    c语言中整型算术运算总是以至少以缺省整型类型的精度来进行的,为了获取这种精度,表达式中的字符和短整型操作数在使用之前转换为普通整型,这种转换称为整型提升。

    整型提升分为有符号的整型提升和无符号的整型提升。

    有符号的整型提升按照变量数据类型的符号位来提升;无符号的整型提升按照高位补0来提升。

    比如定义了三个char类型的数,现在把其中两个数相加并赋值给第三个数,相加的两个数就要进行整型提升。相加的结果赋给第三个数时需要进行截断,因为int型在内存中占4个字节,char型占1个字节。

    #include<stdio.h>
    
    int main()
    {
    	//发现a和b都是char类型,没有达到一个int大小
    	//此时发生整型提升,按照变量数据类型的符号位来提升
    
    	char a = 3;
    	//00000011 实际存储
    	//000000000000000000000011 整型提升后
    
    	char b = 127;
    	//01111111 实际存储
    	//000000000000000001111111 整型提升后
    
    	char c = a + b;
    	//000000000000000010000010
    	//10000010 发生截断
    
    	printf("%d\n",c);
    	//打印整型,所以又进行整型提升
    	//111111111111111110000010 整型提升后 
    	//注意此时c为负数,内存中存放的是补码
    	//111111111111111110000001 反码
    	//100000000000000001111110 原码
    	//所以打印结果为-126
    	return 0;
    }
    

    在计算过程中需要注意负数在内存中的存储形式。

    更多相关内容
  • C语言整型提升

    2022-05-01 21:20:47
    什么是正整型提升2.整型提升的规则3.例题4.整型提升的意义 1.什么是正整型提升 官方的解释是: 整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整型首先要提升为int类型,如果int类型不足以表示则要提升...

    1.什么是整型提升

    官方的解释是:

    整型提升C程序设计语言中的一项规定:在表达式计算时,各种整型首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。

    2.整型提升的规则

    整型提升分为有符号和无符号两种

    • 有符号的:整型提升时是按照变量的补码被截断时的最高位是什么进行补位的,如果截断后最高位(即最左面)的一位数为 1 则在最高位前补 1 ,如果最高位是 0 则在前面补 0 ,补够32位即int类型即可。
    • 无符号的: 直接在被截断的前面补 0 即可。

    3.例题

    直接看代码:

    int main()
    {
    	char a = -1;
    	signed char b = -1;
    	unsigned char c = -1;
    	printf("a=%d\nb=%d\nc=%d\n", a, b, c);
    	return 0;
    }
    

    上面代码运行结果如图:(编译器计算过程中发生了整型提升与截断)
    在这里插入图片描述
    分析如图:
    在这里插入图片描述

    我们可以分成几步来看:

    1. 数字-1的补码为:11111111111111111111111111111111 , 将数字-1交给a时,因为a,b,c的类型为char类型即只有一个字节,所以a,b,c中只能储存一个字节(即8个比特位),所以需要进行截断只保留最后的8个比特位,所以此时a中储存的比特位为:11111111 (上图中有转换过程)。此时得到的是补码(因为整型数字在计算机中都是以补码形式存储)
    2. 以%d打印需要进行整型提升。a,b都是有符号数最高位为1,则在前面(最左边)补1得到:11111111111111111111111111111111. c为无符号数在前面(最左边)补0得到:00000000000000000000000011111111.
    3. 再转换成原码打印 。a,b原码:10000000000000000000000000000001(补码减一取反得到原码). c原码为:00000000000000000000000011111111(整数无符号数原码=反码=补码)。最终得到a=-1,b=-1,c=255

    再看一个例子:

    int main()
    {
    	char a = 3;
    	char b = 127;
    	char c = a + b;
    	printf("%d\n", c);
    	return 0;
    }
    

    不细心的老铁一看c=130,但运行后结果是-126.为什呢?
    在这里插入图片描述
    结合下图分析:
    在这里插入图片描述

    1. 数字3的补码为:00000000000000000000000000000011 , 将数字3交给a时,因为a的类型为char类型即只有一个字节,所以a中只能储存一个字节即8个比特位,所以需要进行截断只保留最后的8个比特位,所以此时a中储存的比特位为:00000011

      数字127的补码为:00000000000000000000000001111111 同理也因为为char类型发生截断,截断后b中储存的比特位为: 01111111

    2. 执行 a+b 时先对8比特位的a,b进行整型提升,因为都为char 类型所以为有符号位,提升时补最高位的数字0,补够32位。提升后两者的补码为:

      00000000000000000000000000000011
      00000000000000000000000001111111

      将a,b相加得到补码:

      00000000000000000000000010000010

    3. 又 c 为char类型,只能存放8个比特位,所以需要截断,截断后c 中储存的比特位为:10000010

    4. 再以%d形式打印,需要32位比特位,要对 c 进行整型提升了。因为c 的最高位是 1 在最高位前面补 1 即可,补够32位,提升后补码为:11111111111111111111111110000010

    5. 将补码转化为原码的形式打印出来,转化后的原码为 : 10000000 0 00000000000000001111110为负数,原码对应的整数就为 -126

    4.整型提升的意义

    整型提升的意义在于:表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。通用CPU是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

    展开全文
  • 小白笔记特别篇:表达式求值。本期内容属于操作符详解的特别篇,主要内容为整型提升和问题表达式。本期内容比较难懂,需要大家的逻辑思维,希望小伙伴们看完能有所收获。

            哈喽小伙伴们大家好,这几天已经有点怀疑人生了,俗话说“一切快乐和自信源自于无知”,古人诚不欺吾也!最近几天我的快乐都没有了,原因就是将要写的这篇文章——表达式求值。其实这期内容鹏哥讲的我几天前就看完了,这几天一直在痛苦的查阅相关资料中(当然学习掌握到这种重难点知识还是另有一番成就感的),因为看完鹏哥对于此处的讲解,我直接变身十万个为什么,心中的疑惑和不解实在太多,时至今日我仍然有很多不解之处,之所以现在开始动手写文章实在是我查阅的资料已经非常多了,必须梳理一下,不然太乱了。所以这篇文章必定会有一些问题,因为我的理解还不够,有些甚至是错的,所以也是希望小伙伴们发现问题及时沟通反馈,学海无涯我们共同进步呀!

            好了,我们直接开始本期内容,本期我们分两大部分,整型提升和问题表达式,整型提升是重中之重。

    1整型提升

            肯定是先介绍定义说一下什么是整型提升啦,我这里就不粘贴官方定义了,因为实在是晦涩难懂,直接以我的理解从新说一个我个人的定义。首先,整型提升是一种偷偷的行为,我们(像以前快乐无知的我)是看不见的,所以也就不知道,官方的名称叫做“隐式类型转换”,下面我就从为什么发生和什么时候发生给小伙们进行讲解,才疏学浅,还望大家互相学习,有不对的欢迎评论区指出,让我们共同进步。

    1.1为什么发生整型提升

            所谓整型提升,想了解就要知道为什么要进行整型提升。原因呢就是我们的CPU在处理表达式运算时,一般使用的是整形运算器ALU,这个运算器的操作数的字节长度一般就是int的字节长度,同时int也是CPU的通用寄存器的长度,也就是说虽然存在机器语言可以让计算机执行两个8bit位(单字节,例如char型)的数字计算,但是实际上绝大多数CPU是不能进行这样的计算的,因为并没有这样的容器来“盛放”他们。如同吃饭一样,我们家的盘子都是放4个馒头的大盘子,即使你只吃一个馒头,我也不可能去给你买个放一个馒头的小盘子,也是用这个大盘子装。而内存相当于我们家橱柜,它的空间是可以定义的,你可以直接把馒头放里面,它就占一个馒头的空间。我向橱柜放一个馒头,就像我定义“char a = 1”,然而当我吃得时候,我得拿一个盘子装,或者说我加热馒头的时候,我得用盘子装,这里的“吃”,“加热”就相当于表达式运算,我家只有装4个馒头的盘子,那就只能用它来盛放。而当我吃得时候,或者没吃掉放回柜子里,再或者我就把他放在盘子里放进橱柜,前两种它就占我的胃或者柜子的一个馒头位置,而放盘子就占柜子一个盘子,也就是4个馒头的位置,这取决于表达式运算的结果我们用什么接收。这样我相信大家就可以很好地理解为什么会发生整型提升了。

            知道了为什么发生整型提升之后,我们还是来看一下官方的定义:C的整型算术运篡总是至少以缺省整型类型也就是默认整形类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。

    1.2什么时候发生整型提升
            现在相信小伙伴们就可以懂了吧,其实就是人家的盘子都是放4个馒头的嘛,你算一个馒头或者两个馒头(char和short),也得用这大盘子装。那么知道了为什么,下面来说一下什么时候生整型提升。其实如果为什么我领悟了80,那么什么时候我感觉我只知道60。这几天我查阅了大量的资料,也没有找到一个比较满意的答案,在我目前的理解看来,只要是表达式计算,表达式里有小于int的,都要提升成int。但是对于表达式计算包括什么,这个我就不是很理解,目前来看应该是前面讲的操作符都是表达式计算,唯一出现问题的就是取反操作符“!”,这个咱们后面在细讲,因为在查阅尝试的过程中我遇到了相当多的问题。后面一一给大家分享。那么对于什么时候发生,总结来说有两点:

            1.表达式求值,有大于整型int的转化为相应整型,没有大于int整型或者最大为int整型,则char(unsigned char)和short(unsigned short)全部转化为int型。

            2.如果表达式内不包括比int更大的类型,但是原始类型值域不可以被int表示,那么转为unsigned int。其实类似于有比int更大的类型,就是当表达式中有unsigned int型时,全部转化为unsigned int型。虽然int与unsigned int都是4字节,但是unsigned int比int值域大,所以为保证精度,还是会都整型提升为unsigned int。

            unsigned是无符号数的意思哈,比如char能存储-128到127,而unsigned char同样占一字节,能表示的值域为0到255,这是因为虽然同为1字节8bit,无符号数8位都用来表示数字,而有符号数只有7位能作为二进制表示值,首位为符号数,所以一般认为unsigned类型相较于原类型更大,同时为表达式中最大类型时要发生整型提升到unsigned型。

    1.3整型提升规则

            有符号数:向前补符号位(正补0,负补1)

            无符号数数:向前补0

    1.4整型提升例题

            好了,概念到此结束,所谓实践出真知,接下来上实战:

    例1:

    int main()
    {
    	char a = 3,
    		 b = 127,
    		 c = 0;
    	c = a+b;
    	printf("%d\n", c);
    	return 0;
    }

            大家不妨猜一下结果,相信大家如果不知道整型提升的话,应该第一反应就是有溢出和截断,但是对于结果是多少就不知道了,那么学了整型提升,让我们来一起算一下,因为涉及32位二进制,所以还是放到代码里给大家说:

    例2:

    int main()
    {
    	char a = 0;
    	printf("%d\n", sizeof(a));
    	printf("%d\n", sizeof(+a));
    	printf("%d\n", sizeof(!a));
    	return 0;
    }
    

            这题的答案为1,4,1,相信大家有很多疑问,我来说一下。首先第一个问题:sizeof不是不进行计算吗,才讲过的呀,我才看过阿g的文章,你可别骗我?这里说一下,sizeof是不产生计算结果,也就是说括号内的操作并不会真的对相应表达式内的元素所在的地址的值产生改变,但是表达式作为sizeof的一个参数,他肯定是要产生一个结果供sizeof计算其大小,所以sizeof内的表达式是会开辟新的内存空间进行计算并产生结果的,但是计算完成被sizeof计算完后内存就会释放掉,不会影响参数值。

             讲清sizeof的问题,还有!a操作怎么没有将表达式结果整型提升为int?这个问题我查阅了相当多的资料,但是由于问题不好描述,查到的大部分也是避重就轻或者没在意这个问题,结果就是并没有官方的确定的答案,下面是我个人的一点理解,仅供参考。

            在思考为什么的过程中,我把char改为了short,这时候理论上来说应该是“!”操作不发生整型提升,sizeof求得结果为2,但是我运行的结果让我大吃一惊:

             居然是1,我恍然大悟,“!b”根本就不是没有发生整型提升(当然我也不确定发生过,查了许久没得到确切的结果),而是表达式经过取反操作结果变为bool型,bool型占一字节。为了印证我有做了一个实验:

            事实证明,我的结论是正确的,取反操作“!”确实会把表达式变为bool型,解决了这个疑惑,我又去把剩下的单目操作符都试了试,我惊讶的发现++a居然sizeof求值也为1:

             经过我一番思考,我大概理解了原因:++a它就等价于a = a+1,这样来看的话虽然“a+1”计算肯定发生了整型提升,但是结果赋值给a又发生了截断,而++与--作为操作符时,操作数必须是可修改的左值(因为++a只是a = a+1的简写,此表达式等号左边必须为变量),即一个在内存开辟了空间的变量,所以无论如何,结果都会存入这个变量本身,所以本题中sizeof算得的就是a和b的大小。做实验验证结果如下:

            受此启发,我发现又一个操作符也不太对劲,那就是取地址“&” 。为什么说他不对劲呢,这是因为虽然我在实验时sizeof(&a)确实等于4,似乎发生了整型提升,但是我在理解++a之后就感觉不对劲了,因为看似简单的操作符,其中居然隐藏着“=”,思考之下,我认为sizeof(&a)= 4是因为在32位系统下,得到的指针变量大小就是4罢了,而不是所谓的a经过&操作发生了整型提升。实验果然验证了猜想,切换为64位系统,sizeof(&a)= 8。

            最终经过对各种奇怪的问题的探究和理解,结合整型提升那晦涩难懂的定义,我似乎理解了那个定义,从而对整型提升有了更加深入的理解。以下三条为大重点!!!

           一、 那就是计算机CPU一般根本不具有直接计算int型以下类型的能力(除非根据需求特制的计算机CPU),也就是说,只要是小于int型的数据类型参与表达式的计算,那么不管结果如何,在用到这个值时都一定会发生整型提升,因为计算机CPU内最小的盘子就是放4个馒头的。

            二、而用sizeof(一个表达式)来证明这个表达式有没有发生整型提升是错误的,是不可靠的!因为sizeof计算的是结果的大小,之所以有时候似乎可以证明发生了整型提升,那是因为表达式计算的结果是不存储的,即结果是单纯的一个计算结果,没有被保存到任何容器内,否则sizeof计算的将是那个容器的大小。只有表达式的结果是大杂烩,这个结果才是所有值里最大那个类型。

            三、发生整型提升是于个体而言的,是否发生是由两个将要计算的值得类型决定的!只要是类型小于int型的值在被使用计算时都一定会发生整型提升。而两个类型大于int型的值计算时,如果类型不同,一样还是要被提升为二者之间大的类型,float与double进行计算时float要提升为double。其目的都是为了让结果更精确。

            好了,那么这期内容就是这些了,相信大家看了一定会有所收获,因为我在研究的时候也是常常是豁然开朗。这样学习过程让人非常的舒适。虽然知道的太多会变不快乐,但是收获的快乐也是让人流连忘返的。由于本期内容有大量的个人理解和见解,所以必然有不足,缺陷甚至于错误,希望小伙伴们能够有思考的接收呀!

            如果觉得这篇文章对你有帮助欢迎收藏点赞转发,如果发现问题或者有不解之处也欢迎小伙伴们在评论区交流哦。最后喊出我们的口号“关注小白阿g,让小白不再白学!”亲爱的小伙伴们下期见。

    展开全文
  • C语言中的整型提升

    千次阅读 2022-04-02 14:21:50
    C语言中的整型提升

    大家好啊,我是一只双非学校的计算机小白,学习C语言也不过两周之久,今天斗胆来向大家介绍一下C语言中的“ 整型提升 ”这一概念,也算是对我学习中所掌握的知识的一种总结吧,望各位大佬不吝赐教!

    C的整型算术运算总是⾄少以缺省整型类型的精度来进⾏的。为了获得这个精度,表达式中的字符和短整型操作数在使用前被转换为普通整型,这种转换就叫做整型提升。

    看了上述定义,相信有一部分和我一样同为初学者的朋友可能是看的一头雾水,什么“缺省整型类型 ”,什么“ 精度 、转换”,完全是云里雾里,那么就由我来给大家解释,这所谓整型提升究竟是个什么玩意。

      

    首先,我们来看一个简单的代码:将3赋值给a,以char类型存入内存中,将127赋值给b,也是以char类型存入内存,同样的将a+b的和赋值给c,以char类型存入,这样打印出来的结果会是多少呢?

      很多没接触过的小伙伴也许会说,啊,这简单,不就是3+127=130 嘛。不过既然放在这一节里,显然答案也不会那么简单。我们来看运行结果:

      

       从上图可以得知,运行结果是-126。很多小伙伴不解啊,这是为什么呢?————这就涉及到我们今天要讲的整型提升了。

      我们看,a,b,c的类型是不是都是char类型的?如果是int类型的,很显然结果就是130,但如果以char类型存入,我们知道字符在内存中所占的字节为1,也就是8个比特(bite)位。而在C语言中,整型运算是总是以缺省整型类型的精度来进⾏的,也就是说,将数字以char类型存入,在内存中占据的不是像int类型一样的32个比特位,而是会被截断,只存入字符大小对应的8个比特位,举例来说,像在这里的char a=3,以int类型存入内存时,它的二进制显示是这样的:

      

      而以字符类型存入内存时,它的二进制显示是这样的:

      

    只有8个比特位。

      同理b也一样,那么char=a+b又是如何运算的呢

     

     我们看,首先将a和b以字符类型的方式存入内存,由于a和b都没有达到int类型,这是会发生整型提升,a和b的值被提升为普通整型,然后再执行加法运算,加法运算完成后,结果将被截断,然后再以字符类型存入c中。

     就是上图中的10000010 。

    到了这一步,就要进行c的整型提升了,怎么提升呢?

    来看概念:整型提升是按变量的数据类型的符号位进行提升的。怎么理解?比如说一个正数3吧,它以char类型存入时,就是00000011,要提升为int类型,先看它的符号位,也就是第一位:0,是正数,那么,整型提升时,高位都给它补0,也就是00000000000000000000000000000011 。而如果是负数的话,比如 -1,它以char类型存入时,就是11111111(补码),要提升为int类型,先看它的符号位,也就是第一位:1,决定了它是负数,高位都补1,也就是11111111111111111111111111111111 。

    理解了这个后,我们再来看上述代码,c=a+b运算结束后,我们得到了上述c的补码(整数在内存中存的都是补码,而打印出来的是原码),得到补码后想得到c的原码,我们先求c的反码(反码+1=补码)于是我们得到了c的反码,继而得到了c的原码。此时,在printf中打印出来的就是原码的值:-126 。

    不知道 到目前为止大家听明白了吗?嘿嘿,可能讲的不太好,毕竟我也是第一次,希望大家海涵!

      可能会有小伙伴有疑问,那为什么a和b打印出的原码和在内存中的补码是一样的呢?按上述所讲,不是也应该先补码转成反码,再转原码吗?那是因为正整数的原码、反码和补码是一样的。大家明白了吗?

     最后还有一个例子:

     我们来看这四个:

    第一个不用多说,都知道算的是c这个变量的所占内存空间的大小,因为是char类型的,所以大小是1 。

    第二个、第三个和第四个运行结果是4,是因为c在其中参与了运算,所以它的类型被提升为了int,大小就从1字节变成了4字节。有人可能要问了,sizeof( )中的表达式不是不参与运算吗?怎么会有整型提升呢?这是因为sizeof( )中的表达式虽然不参与运算,但是它总得得出一个计算大小的值对吧,那么,就会根据你( )中表达式,预测你的类型,从而确定提升为int 。再多讲一句,一个表达式总是有2个属性的,一个是值属性,一个是类型属性。比如

     

     c=a+b的值属性就是8,类型属性就是char 。可能运算结果不会放到c里面去,但是它的类型确实是由c说了算。大家清楚了吗?

    第一次写博客可能会有很多不足,请各位大佬批评指正!谢谢!

    展开全文
  • 隐式类型转换和整型提升及其整型提升的意义
  • 整型提升

    2020-02-22 12:32:01
    说明上例中a,b要进行整型提升,但是c本身比特位满足CPU计算要求不需要整型提升,而a,b整型提升之后被CPU计算后返回的数识别为了负数(例如a被识别为了-74)自然不满足a == 0xb6的条件,结果为假,而c没有进行整型...
  • C中的整型提升

    2022-08-02 10:32:47
    C语言中,整型算术运算是在CPU的整型运算器上进行的。而整型运算器内操作数的字节长度一般是普通整型(即int)的字节长度,因此,整型运算时字节长度小于int的操作数都要在。...按符号位整型提升后,...
  • 本文主要讲了隐式类型转换(整型提升),算数转换,操作符的属性,等等一些问题,通过本文你能更深层的了解计算机运算的奥秘。本文干货满满,期待你的访问
  • C语言进阶:整型提升

    2021-05-22 12:18:35
    几乎每个程序员都学过C,而且大多数在他们的工作中使用C。...其中一个例子就是**整型提升**。请看下面这个例子:#include int main(void){unsigned char a = 0xff;char b = 0xff;int c = a==b; // true, or fals...
  • 整型提升与截断

    2022-05-09 21:20:27
    1.什么是整型提升 2.什么是截断 3.什么时候发生整型提升 4.什么时候发生截断 5.整型提升的规则 6.整型提升的例题 什么是整型提升 什么是截断 什么时候发生整型提升 什么时候发生截断 整型提升的规则 整型...
  • 一文让你快速了解隐式类型转换【整型提升】!

    多人点赞 热门讨论 2022-08-09 15:32:19
    0.隐式类型转换[整型提升] C的整型算术运算总是至少以缺省整型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整形提升。简单来说就是,少于4个字节的...
  • C语言-整型提升

    2022-01-03 19:22:16
    为了获得这个精度,表达式中字符和短整型操作数在使用之前被转换为普通整形,这种转换称为整型提升 整型提升的意义: 表达式的整形运算要在CPU相应运算器件内执行,CPU内整形运算器(ALU)的操作数的字节长度...
  • C语言整型提升的规则及样例详解

    千次阅读 多人点赞 2021-03-05 15:17:18
    hello 大家好,相信同学们在学习C语言的时候,有时候会遇到整型提升的情况,今天我们聊一聊什么是整型提升。 什么是整型提升整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为int类型...
  • 整形提升: 在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。 整形提升的原因与cpu运算数据效率和精度有关,就不介绍了,感兴趣的小伙伴...
  • 文章目录一,什么是整型提升?二,整型提升的意义三,如何进行整型提升?二、使用步骤1.引入库2.读入数据总结 一,什么是整型提升? C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,...
  • 整型提升问题 表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器的字节长度,一般就是int的字节长度,同时也是CPU的通用寄存器的长度。 因此,即使两个char类型的相加,在CPU执行时实际上也要先转换...
  • K&R C中关于整型提升(integral promotion)的定义为:"A character, a short integer, or an integer bit-field, all either signed or not, or an object of enumeration type, may be used in an expression ...
  • 整型提升~

    千次阅读 多人点赞 2020-11-05 10:05:30
    什么是整型提升? 首先,我们应该知道这一点:C语言中整型运算总是至少以缺省整型类型的精度来进行的。 这句话什么意思呢?用大白话说就是:C语言中字节数少于整型字节数的数据类型在进行整型运算时,该类型的数据会...
  • 什么是整型提升?数据在内存是如何存储的?一文迅速搞懂! 话不多说,先上代码。 #include<stdio.h> int main() { unsigned char a=100; unsigned char b=200; unsigned char c=0; printf("%d,%d",a+b,c);...
  • 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度...
  • 短整型以及字符类型的变量之间或者相互进行算术运算操作时,就会发生整型提升 一般先将其整型提升为4字节数据再进行运算 将其提升为4字节数据的时候,为使其符号不发生变化,前面添加的数字与原数据符号位相同 ...
  • 关于C整型提升

    2021-05-23 08:39:30
    整型数如果转换为signed不会丢失信息,就转换为signed,否则就转换为unsigned。这个称为值保留(value preserving)原则,与K&R C所采用的无符号保留(unsigned preserving)原则不同。浮点类:如果一个操作数...
  • 10个简单的小理解例题,关于整型提升,数据溢出,数据截断,算数转换,输出类型转换,赋值类型转换等

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,706
精华内容 21,082
关键字:

整型提升

友情链接: CRM.rar