C++算数运算符和位运算符
C++根据功能和用途将运算符分为算数运算符、位运算符、关系运算符和逻辑运算符等不同类型。四种不同运算符的优先级从大到小依次为算—位—关—逻。
一、算数运算符
1、加减乘除(+ - * /)
加减乘除位常识不在详谈,主要讲解一下在进行加减乘除是的数据类型转换。
1)、强制转换
(stort)32指定32为有符号短整型(2字节)、 (long)-32指定-32为有符号长整型(4字节)。数据类型应该和操作数的数值相符,否则将造成数据改变。若(flaot)32将32转为32.0还可以接受,(int)1.8将1.8转为1造成了数据丢失应尽量避免。强转还会造成数据溢出和丢失负号:(short)32769将32769变成-32767,(unsigned short)-1将-1变成65535(丢失负号)。思考为什么-1会变成65535呢?
2)、隐含转换
C++编译器将源程序编译成目标程序时,如果发现某个算术表达式含有不同数据类型的操作数,则进行自动转换。自动转换的原则是将低类型向高类型转换。
数据类型由低到高依次为:char (unsigned char) short (unsigned stort) int (unsigned int) long (unsigned long) float double
3)、表达式的结果
对于加减乘除运算符两侧操作数相同时表达式结果类型与之相同,若一个类型不同则表达式结果同高类型一致(5.5+3=8.3),对于两个整型的除法运算其结果仍未整型(5/2=2),括号运算符可以提高表达式运算优先级。
4)、其他运算符
取余运算符计算两个操作数相除的余数,其只能对两个整型操作数进行取余运算,运算结果也是整型。自增运算符++,可分为前置和后置两种形式,前置该表达式值先进行加1,后置表示式等于加1之前的值。
二、位运算
1)、位反运算符 ~,单目运算符,运算规则:将0变1,将1变0。~01010101 = 10101010,对变量x进行位反运算:x= ~x。
2)、位与运算符 &,双目运算符,运算规则是:参与运算的两个位都为1,则结果为1,否则为0。
位与运算可以检查数s中某一位的状态是0还是1,可以通过与该位对应的掩码进行位与运算如:
bbbb bbbb
& 0000 0010
= 0000 00b0 (这里可检测出倒数第2位b的状态0或1)C++表示为:s&0x2
位与运算还可以将变量s的某一位的状态置为0,例如:
bbbb bbbb
& 11111 1101
= bbbb bb0b (将倒数第2位的b置为0) C++表示为:s = s & 0xFD
3)、位或运算符 |,双目运算符,其规则是:参与运算的两个位只要有一位为1,则结果为1,否则为0。
位或运算可用于将操作数中的某个状态位置为1.例如:
bbbb bbbb
| 0000 0010
= bbbb bb1b (将倒数第二位的b置为1) C++表示为 s= s | 0x2
4)、异或运算符^,双目运算符,其规则是:参与运算的两个位不同(0和1,或1和0),则结果为1,否则为0。
异或运算符可用于将操作数中的某个状态位反置,即将原来的0置为1,将1置为0。
bbbb bb0b
^ 0000 0010
= bbbb bb1b (将倒数第二个状态位反置为1)C++表示为 s = s^ 0x2
5)、左移运算符 << 将操作数左移指定的位数,左移时高位被移除、低位补0。
0011 0011
<< 2
= 1100 1100 C++表示 s << 2
6)、右移运算符 >> 将操作数左移指定的位数,右移时低位被移除、无符号数高位补0,有符号数高位补符号位。
0011 0011 (8位无符号)
>> 2
= 0000 1100 (地位被移除高位补0)C++表示 s>>2
1011 0011(8位有符号)
>> 2
= 1110 1100 (低位被移除高位补1)C++表示 s>>2
三、适用范围
所有参与位运算的操作数只能是整型(short、int和long)和char,包括有符号和无符号格式。对于其他类型如double的操作数位运算,编译时会报错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?