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
三、适用范围
所有参与位运算的操作数只能是整型(char、short、int和long),包括有符号和无符号格式。对于其他类型如double的操作数位运算,编译时会报错。
C++算数运算符和位运算符的更多相关文章
- swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)
swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...
- java 简单认识移位运算符和位运算符
移位运算符和位运算符本质上都是操作二进制位,因为计算机存储的是二进制数据,运算效率相对较高. 移位运算符:把整数的二进制位进行左移或右移 .左移一位,相当于这个数乘以2, 右移一位,相当于这个数除以2 ...
- python常用算数运算符、比较运算符、位运算符与逻辑运算符
编辑时间: 2019-09-04,22:58:49 算数运算符 '+'.'-'.'*'.'/' :加.减.乘.除 '**':指数运算, ‘//’:整除, ‘%‘:求余数 num_1 = 15; num ...
- JAVA算术运算符、关系运算符和位运算符
算术运算符 1.java的算数运算符包括+(加).-(减).*(乘)./(除).%(取余),在运算过程中出现的隐式转换原则和C语言一样:2. 高位数据向低位数据转化要使用强制转化: 关系运算符 1.j ...
- java的布尔运算符和位运算符
1.布尔运算符 && 逻辑与: || 逻辑或: != 不等于: 三元操作符:?: :表达式为 condition?expression1:expression2(当条件为真时 ...
- c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...
- js之运算符(位运算符)
一.概念 位运算在数字底层(表示数字的32个数位)进行运算的.由于位运算是低级的运算操作,所以速度往往也是最快的,但是它很不直观,许多场合不能够使用.大多数语言都提供了按位运算符,恰当的使用按位运算符 ...
- C语言运算符(位运算符)+(赋值运算符)
实列 1 #include <stdio.h> 2 3 int main() 4 { 5 6 unsigned int a = 60; /* 60 = 0011 1100 */ 7 uns ...
- Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)
Java 逻辑运算符.位运算符.移位操作符 总结 作者:王可利(Star·星星) 逻辑运算符,表格如下: 解析逻辑运算符表: 1.与 (&) 特点:两个都为真的时候,结果为真.两个为 ...
随机推荐
- 华硕主板安装Ubuntu双系统无法启动解决办法
问题描述: 在安装完Ubuntu后,开机后没有启动项可以选择,而是直接进入win10系统. 解决办法: 开机进入bios,选择 高级模式 (Advance model),进入 启动(boot)选项卡, ...
- Linux磁盘分区-mount挂载
Linux磁盘分区类型 磁盘存储术语CHS head:磁头 磁头数=盘面数 track:磁道 磁道=柱面数 sector:扇区,512bytes cylinder:柱面 1柱面=512*secto ...
- Linux下高效实用的grep命令
Linux系统中的grep命令是一种功能强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则 ...
- Docker系列教程03-Docker私有仓库搭建(registry)
简介 仓库(Repository)是集中存放镜像的地方,又分为公共镜像和私有仓库. 当我们执行docker pull xxx的时候,它实际上是从registry.docker.com这个地址去查找,这 ...
- 在vue-cli中安装scss,且可以全局引入scss的步骤
简历魔板__个人简历模板在线生成 在写vue的css样式时,觉得需要css预处理器让自己的css更加简洁.适应性更强.可读性更佳,更易于代码的维护,于是在vue-cli脚手架采用scss.写过的人都知 ...
- go 语言开发2 简易数据库和web代码示例
数据库开发示例 package dao import ( "github.com/go-xorm/xorm" "fmt" ) type UserInfo str ...
- 微信小程序云开发如何实现微信支付,业务逻辑又怎样才算可靠
今天打了几把永劫无间后,咱们来聊一聊用云开发来开发微信小程序时,如何实现微信支付,并且保证业务逻辑可靠. @ 目录 注册微信支付商户号 小程序关联商户号 业务逻辑 代码实现 注册微信支付商户号 点击& ...
- jmeter 基础使用
相关入门链接 JMeter 5.4.1 教程 插件安装 并发线程 ServerAgent 服务器监控 ServerAgent 下载 Ubuntu 20.04 install jdk/jre 服务器监控 ...
- Blazor和Vue对比学习(进阶2.1.1):生命周期,基本理解和使用
一.基本理解 首次接触"生命周期"这个名词,是比较晦涩的,Vue中又有生命周期钩子,而Blazor则是虚方法重写,容易蒙.所以,我尝试从初学者的角度来阐述一下. 1.我们在基础部分 ...
- Fail2ban 命令详解 fail2ban-regex
fail2ban-regex是fail2ban提供的用来测试正则表达式的一个小工具,我们可以用它来测试正则表达式是否能够匹配到日志文件中的要禁止的IP行. fail2ban-regex默认情况下自动匹 ...