逗号运算、关系运算、逻辑运算、条件运算,运算符优先级

目录 编辑器vs2017

  • 逗号运算和逗号表达式
  • 关系运算与关系表达式
  • 逻辑运算符与逻辑表达式
  • 条件表达式与条件运算符
  • sizof运算、位运算
    • sizeof运算
    • 位运算——按位与(&)
    • 按位或
    • 按位异或
    • 按位取反
    • 位运算——移位(<< ,>>)
  • 16进制的计算
  • 运算符优先级问题

逗号运算和逗号表达式

表达式1,表达式二

  • 先求解表达式1,再求解表达式2
  • 最终整个逗号表达式的结果为表达式2的值(不是说a的值就等于表达式2的值了,逗号表达式只计算,如果没有赋值给x则表现不出来逗号表达式的计算结果)

例如:

#include
using namespace std;
int main()
{
	int a;
	int x;
	x=(a= 3 * 5, a * 4);
	cout << "a的值为" << a << endl;
	cout << "x的值为" << x << endl;

	return 0;
}	

结果
在这里插入图片描述

关系运算与关系表达式

是一种简单的逻辑运算,因此结果类型为bool,值只能为true 或false

比较运算符:
1.优先级(高)
< <= > >=

2.优先级(低)
== !=
例如
a>b,c<=a+b,x+y==3

逻辑运算符与逻辑表达式

运算符
!(非) &&(与) ||(或)
优先级:高——低
结果
bool类型
表达式
(a>b)&&(x>y)

  • &&
    两侧表达式都为真,则结果为真,否则结果为假
  • ||
    两侧表达式有一个为真,则结果为真

条件表达式与条件运算符

  • 一般形式
    表达式1?表达式2:表达式3
    表达式1必须是bool类型
  • 执行顺序
    先求解表达式1
    若表达式1为true,则求解表达式2,表达式2的值为最终结果
    若表达式1为false,则求解表达式3,结果为表达式3
  • 例如
int a = 4, b = 5;
	int num,num2;
	num = a > b ? 8 : 9;
	num2 = a < b ? 8 : 9;
	cout << "num的值为" << num << endl;
	cout << "num2的值为" << num2 << endl;

结果
在这里插入图片描述

sizof运算、位运算

sizeof运算

语法形式
sizeof(类型名/表达式/变量名)或 sizeof 类型名/表达式/变量名
结果值
“类型名/表达式”所指定的类型所占的字节数。

int a = 2;
	cout << sizeof(a) << endl;

在这里插入图片描述

位运算——按位与(&)

运算规则
将两个运算量的每一个位进行逻辑与运算
例如:4&5
4:00000100
5:00000101
结果:00000100
结果为4;

int a = 2, b = 5, d = 4;
	int c = a & b;
	int e = d & b;
	cout << "c的值为" << c << endl;
	cout << "e的值为" << e << endl;

在这里插入图片描述
用途举例:将某一位置置0,其他位不变
例如:将char型变量a的最低位置为0:a=a&0xfe(1111 1110)
用途举例:取处指定位
例如:有char c;int a;取处a的低字节置于c中:
c=a&0xff(1111 1111)
结果取处了a的低八位,赋值到c中

按位或

例1:
将某些位置置1,其他位置不变。将int变量a的低字节置1;
a=a|0xff;

按位异或

运算规则:
两个操作数进行异或,
若对应位相同,则结果为0,
若不相同,则结果为1,
例题:71^52

int k = 71^ 52;
	   //71: 0 1 0 0 0 1 1 1
	   //52: 0 0 1 1 0 1 0 0
	//71^52: 0 1 1 1 0 0 1 1
	cout << k << endl;

在这里插入图片描述
作用:
1、使指定位反转

按位取反

符号~

位运算——移位(<< ,>>)

左移:<<
左移后,低位补0,高位舍弃
右移:>>
低位:舍弃
高位:无符号数:补0 有符号数:补符号位

16进制的计算

0x开头表示16进制
1,2,3,4,6,7,8,9,a,b,c,d,e,f

0xff = 15 * 16 ^ 1 + 15 * 16 ^ 0=240+15=255;

(突然发现c++语法中, ^ 不能表示次方,是表示异或操作的,应该是matlab中这样表示的吧,记错了,vs2017中不能这样表示,事实上我没有进行计算哈,只是因为这个编辑器我不会打乘法符号,就顺便在代码编辑器中写了一下解释说明,方便理解)

运算符优先级问题

逗号运算、关系运算、逻辑运算、条件运算,运算符优先级_第1张图片
数据类型由低到高
char(unsigned) short(unsigned) int(unsigned) long(unsigned)
longlong float double
两个运算数据不同时,由低类型向高类型转换

布尔类型:
将一个非布尔类型的算术值赋给布尔类型时,算数值为0则结果为false,否者结果为true;
将一个布尔类型值赋给非布尔类型时,布尔值为false,则结果为0,布尔值为true则结果为1;

你可能感兴趣的:(c++学习手册,c++,c语言)