Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >整形提升和算数转换

整形提升和算数转换

作者头像
秦jh
发布于 2024-01-19 02:24:37
发布于 2024-01-19 02:24:37
2270
举报
文章被收录于专栏:c语言,c++c语言,c++

c的整形算数运算总是至少以缺省整形类型的i精度来进行的。

为了获得这个精度,表达式中的字符短整型操作数在使用之前被转换为普通整形,这种转换称为整形提升。

我们常见的int实际上是signed int(有符号整形),另一种为unsigned int。

但是char类型到底是signed char还是unsigned char是不确定的,C语言标准没有明确指明,是取决于编译器的。在VS上,char==signed char。

5的二进制如上图,我们要把它赋给a,而a是字符型变量,所以从最小的位数开始取一个字节(8位)给a。b的情况同a。

a和b都是8位的,但他们要进行运算,因此我们需要先进行整形提升,然后才能相加。

 又因为c也是字符型变量,所以对c也是取最小的8位,然后保存在内存中。如果我们想要打印出c的值,我们需要进行整形提升,然后从补码转换成原码。注意:因为c是signed char(有符号的char),因此高位补符号位1。

注意:整形提升时,如果是有符号的,高位要补符号位,如果是无符号的,高位直接补0. 

例子2:

我们看到,只打印了c。

分析:a和b需要进行整形提升,但是c不需要整数提升。a和b整数提升后都变成了负数,表达式都为假,所以只打印了c。

例子3:

 分析:c只要参与表达式运算,就会发生整形提升,表达式+c和-c都会发生整形提升,sizeof(+c)和sizeof(-c)都是4个字节,而sizeof(c)不发生整形提升,因此为1个字节。

算数转换

如果某个操作符的各个操作数属于不同类型,需要进行算数转换。就需要把其中一个操作数的转换为另一个操作数的类型,对于小于普通整形的数,我们会先进行整形提升。如果他们的类型大于等于普通整形int,就转换成精度更高的类型

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
编辑器对内存的使用——数据的保存与访问使用(整形篇)
当你不断的在你五彩斑斓的编辑器上敲一串又一串的代码时,你会不会思考这些代码是如何实现的呢?有人会说有打包好封装好的库函数给我们使用,但是这些函数又是靠的什么来实现的呢?而且代码也不只有函数,还有各种的操作符,它们又是如何实现的呢?
比特大冒险
2023/04/16
5080
编辑器对内存的使用——数据的保存与访问使用(整形篇)
隐式类型转换之整形提升
  整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。
RAIN7
2021/08/11
1.3K0
C语言进阶:整型数据的存储
C的整型算数运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的**字符和短整型操作数( char 属于整型家族 )**在使用之前被转换为普通整型,这种转换称为整型提升。
aosei
2024/01/23
4600
C语言进阶:整型数据的存储
表达式求值过程中会发生哪些隐藏的变化?求值顺序又由什么决定?——详解C表达式求值中的隐式类型转换,算术转换问题,以及操作符的属性
我们写出的表达式,在求值的过程中,一定是按照我们所想的在一步一步运算吗?会不会发生一些我们察觉不到的变化呢?任意给定一个表达式,它的计算路径一定是确定的吗?
YIN_尹
2024/01/23
1950
表达式求值过程中会发生哪些隐藏的变化?求值顺序又由什么决定?——详解C表达式求值中的隐式类型转换,算术转换问题,以及操作符的属性
还不进来看吗?c趁你不注意偷偷将你的数据类型转换啦
如果不了解 整形提升 的小伙伴可就要注意了,c偷偷将你的数据类型改变了你都不知道.快点和牛牛一起学习一下c语言中 整形提升的知识吧 !
初阶牛
2022/12/06
2240
还不进来看吗?c趁你不注意偷偷将你的数据类型转换啦
【表达式求值】整型提升和算术转换
C语言中整型算术运算总是至少以整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。(若类型 < 整型类型,则该类型提升为int或者unsigned int)
用户11328191
2024/10/23
1980
【表达式求值】整型提升和算术转换
整型之韵,数之舞:大小端与浮点数的内存之旅
C语⾔中整型算术运算总是⾄少以缺省整型类型的精度来进⾏的。 为了获得这个精度,表达式中的字符和短整型操作数在使⽤之前被转换为普通整型,这种转换称为整 型提升。
秋邱
2024/10/09
1740
整型之韵,数之舞:大小端与浮点数的内存之旅
C语言:数据在内存中的存储形式
关于整数在内存中的存储形式,在博主之前写的文章里已经介绍了!友友们可以去点下面链接去看,这里就不过多介绍。
小陈在拼命
2024/02/17
5630
C语言:数据在内存中的存储形式
【C语言】室友看了这操作符,连王者都不准备打 |
注意:数学上的是乘法(x),而在我们编程当中是星号(*)。 运行结果:Arabic numerals = 4
謓泽
2022/12/12
6160
【C语言】室友看了这操作符,连王者都不准备打 |
【C】操作符详解
下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
阿伟@t
2023/10/10
3020
【C】操作符详解
抽丝剥茧C语言(中阶)操作符+练习
这一篇会让你更加熟练合理的利用操作符,有一些代码是很坑爹的: int i = 1; int ret = (++i) + (++i) + (++i); 是不是很熟悉? 其实这个是个有问题的代码,至于是为什么? 我们往下看。
有礼貌的灰绅士
2023/03/28
6390
抽丝剥茧C语言(中阶)操作符+练习
操作符详解(2)
C语言的整型算术运算总是至少以缺省(默认)整型类型的精度来进行的;为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。
waves浪游
2024/01/22
1670
操作符详解(2)
如何深入掌握C语言操作符及表达式求值(详解)
2. 对于 / 操作符如果两个操作数都为整数,执行整数除法(相当于取余返回整数值)
用户9645905
2022/11/30
7010
如何深入掌握C语言操作符及表达式求值(详解)
未禾的C语言总结
**************************************************************************************************************************************************************************************************************** 操作符解释:     1,算术操作符:         ‘+’、‘-’、‘*’、‘/’、‘%’         %取模操作符只能用于整数,         /除法操作符,两个操作数均是整数时为整数除法,有一个是浮点数则执行浮点数除法。         如:int a = 6/5;//->a==1             double b = 6/5;//->b==1.000000             double c = 6.0/5//->c==1.200000,即实际运算与定义的储存类型无关     2,移位操作符         左移‘<<’、右移‘>>’         左移操作符:             如:   int a=2;                 int b = a << 1;//a向左移动一位,结果存入变量b中,结果b为4             正整数2在内存中存放的补码为:                                00000000000000000000000000000010             向左移动一位,左边的首位0去掉,右边的缺一位补0:00000000000000000000000000000100 ->4(十进制)         右移操作符:             右移时分为算数右移和逻辑右移。             算数右移:右边丢弃,左边补符号位。             逻辑右移:右边丢弃,左边补0。             如:int a = -10;                    int b = a >> 1;//a向右移动一位,结果存入变量b中             正整数10在内存中的补码为11111111111111111111111111110110//若为负数则原码与补码不同。             算术右移:             11111111111111111111111111111011 ->-5             逻辑右移:             01111111111111111111111111111011 ->2,147,483,643         对移位操作符移动负数位,这时C语言未定义的,不要使用。     3,位操作符         按位与‘&’、按位或‘|’、按位异或‘^’         位解释为二进制的一位。         &按位与,全为1时结果才为1,其他情况结果均为0             如:int a = 3;//        00000000000000000000000000000011                    int b = 5;//        00000000000000000000000000000101                    int c = a & b;//    00000000000000000000000000000001->1(十进制)             eg:找出一个整数的二进制的1的个数。                 #include <stdio.h>                 int main(){                 int a=1;                 int cnt=0;                 for(int i=0; i<31; i++){                     if((a&1) == 1){//整数的二进制数的1的个数                          cnt++;                     }                     a=a >> 1;                 }                 printf("%d\n",cnt);                 return 0;             }          |按位或,全为0时结果才为0,其他情况结果均为1             如:int a = 3;//    000
怠惰的未禾
2023/04/27
5790
【C语言初阶】C语言操作符全攻略:提升编程效率的关键步骤
前言:在编程的世界里,C语言如同一座巍峨的基石,奠定了无数编程语言与软件系统的基础。作为一门历史悠久且功能强大的编程语言,C语言以其高效、灵活和可移植性赢得了广泛的赞誉和应用。而在C语言的众多组成部分中,操作符无疑是其中最为基础且关键的一环
Eternity._
2024/08/09
2300
【C语言初阶】C语言操作符全攻略:提升编程效率的关键步骤
操作符详解
2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
绝活蛋炒饭
2024/12/16
1650
操作符详解
[C语言]操作符(operator)
1.除了%操作符外,其他的几个操作符可以作用于整数和浮点数,%操作符只能作用于整数。
IT编程爱好者
2023/04/12
6470
[C语言]操作符(operator)
C语言详解(四) - 操作符
符号位:正整数的最高位是符号位,默认是0。 原码:由相应类型的整数直接写出的二进制形式,二进制位不够则在高位补0 正整数和0的原码、反码、补码均相同,故其补码就是其原码。
怠惰的未禾
2023/04/27
4610
C语言详解(四) - 操作符
【初级】C语言——详解操作符
                浮点型的除法 1.0/2      1/2.0--->0.5
xxxflower
2023/04/16
6380
【初级】C语言——详解操作符
c语言操作符万字超详解
上面的操作符中,算术操作符、赋值操作符、逻辑操作符、条件操作符和一些单目操作符已经在之前的博客中有所提及,这里就不再赘述了。
fhvyxyci
2024/09/24
2870
c语言操作符万字超详解
推荐阅读
相关推荐
编辑器对内存的使用——数据的保存与访问使用(整形篇)
更多 >
交个朋友
加入[架构及运维] 腾讯云技术交流站
云架构设计 云运维最佳实践
加入前端趋势交流群
追踪前端新趋势 交流学习心得
加入架构与运维趋势交流群
技术趋势前瞻 架构演进方向
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档