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.与 (&) 特点:两个都为真的时候,结果为真.两个为 ...
随机推荐
- 一次不规范HTTP请求引发的nginx响应400问题分析与解决
背景 最近分析数据偶然发现nginx log中有一批用户所有的HTTP POST log上报请求均返回400,没有任何200成功记录,由于只占整体请求的不到0.5%,所以之前也一直没有触发监控报警,而 ...
- XCTF练习题---MISC---something_in_image
XCTF练习题---MISC---something_in_image flag:Flag{yc4pl0fvjs2k1t7T} 解题步骤: 1.观察题目,下载附件,这是一道2019湖湘杯的题目 2.下 ...
- 漏洞复现:MS14-064 OLE远程代码执行漏洞
MS14-064OLE远程代码执行漏洞 攻击机:Kali Linux 2019 靶机:Windows 7 x64.x32 攻击步骤: 1.打开攻击机Kali Linux 2019系统和靶机Window ...
- 印尼医疗龙头企业Halodoc的数据平台转型之路:数据平台V1.0
1. 摘要 数据是每项技术业务的支柱,作为一个健康医疗技术平台,Halodoc 更是如此,用户可以通过以下方式与 Halodoc 交互: 送药 与医生交谈 实验室测试 医院预约和药物 所有这些交互都会 ...
- Atlas2.2.0编译、安装及使用(集成ElasticSearch,导入Hive数据)
1.编译阶段 组件信息: 组件名称 版本 Atals 2.2.0 HBase 2.2.6 Hive 3.1.2 Hadoop 3.1.1 Kafka 2.11_2.4.1 Zookeeper 3.6. ...
- IDEA快捷生成循环♻️
itar 生成array for代码块 //itar for (int i = 0; i < array.length; i++) { = array[i]; } itco 生成Collecti ...
- HMS Core分析服务6.5.0版本更新啦
卸载用户价值的合理评估对制定相应的用户召回策略具有重要意义. HMS Core分析服务新版本支持查看用户卸载前使用次数.崩溃次数等指标.通过这些数据,您可以更直观地判断已卸载人群粘性以及崩溃问题对用户 ...
- model.apply(fn)或net.apply(fn)
详情可参考:https://pytorch.org/docs/1.11/generated/torch.nn.Module.html?highlight=torch%20nn%20module%20a ...
- [安洵杯 2019]easy_web-1
1.首先打开题目如下: 2.观察访问的地址信息,发现img信息应该是加密字符串,进行尝试解密,最终得到img名称:555.png,如下: 3.获得文件名称之后,应该想到此处会存在文件包含漏洞,因为传输 ...
- 记ettercap0.8.3的DNS欺骗
无意间接触到这个叫中间人攻击,找了些教程自己搞了一遍. 局域网内测试,kali虚拟机桥接本地网络,不然不在一个段上面.kali 192.168.1.191 win10 :192.168.1.7 ett ...