C/C++运算
C语言字符串的比较
#include <string.h>
int strcmp( const char *str1, const char *str2 );例如:
int ret;
ret = strcmp(str1, str2);返回值:
str1 < str2时, 返回值< 0(有些编译器返回 -1)
str1 > str2时, 返回值> 0(有些编译器返回 1)
str1 等于 str2时, 返回值为0
#include <stdio.h>
#include <string.h>
#include <Windows.h>int main(void) {
char addr[32];
int ret;
printf("美女,你是哪里人?");
scanf("%s", addr);
if (strcmp(addr, "湖南") == 0)
{printf("美女,我们是老乡啊!\n");
}
else
{printf("美女,你和我的同学是老乡啊!\n");
}
system("pause");
return 0;
}
其它数据类型的比较运算
char, int, short, float, double等数据类型,都可以使用比较运算:
大于:>、大于或等于: >=、小于:<、小于或等于: <=、不等于: !=、等于:==(注意:不是 = )
比较运算的结果:(逻辑值):结果为“真”:true、结果为“假”:false
逻辑运算
C++与C语言完全相同。与或非
逻辑与 &&
都为真,逻辑与才是真。只要有一个是假, 逻辑与就是假。相当于“而且”
应用场景:当需要两个条件都满足时,就使用逻辑与
特别注意:条件1 && 条件2;当条件1为真时,才去判断条件2,当条件1为假时,就不再判断条件2。
逻辑或 ||
只要有一个是真, 结果就是真。都为假时,结果才是假。相当于“或者
应用场景:只需要满足任意一个条件时,就使用逻辑或
特别注意:条件1 || 条件2;当条件1为真时,就不再判断条件2,当条件1为假时,才判断条件2
逻辑非 !
是”单目运算符”, 即:只有一个操作数,相当于“不”
应用场景:当需要不满足某条件时,就使用逻辑非
特别注意:逻辑非,只对一个条件进行运算!是一种“单目运算符”
位运算
问题:把地址为0x80040的寄存器的最低4位设置为0110
解决方案:使用位操作,内存的基本单元是字节, 一个字节有8位。先低4位清零,再赋1.
位与 & 对应位, 都是1, 结果才是1
// 00001000
// 00000011
// 00000000
cout << " 8 & 3 = " << (8 & 3) << endl;
位或 | 对应位, 都是0, 结果才是0、只要有一位是1, 结果就是1
位非 ~ 取反
异或^ 对应位不同, 结果才是1
<< 左移 右边的位用 0 来填充, 移动超出左边边界的位则直接抛弃;向左移动 n个位置,就等同于乘以 2的n次方。只适用于: int/short/long/char 等定点数类型(float/double浮点数类型不能使用)
>> 右移 如果左操作数是无符号类型,则左边多出来的位用 0 来填充。如果左操作数是有符号类型,则左边多出来的位用 符号位(最高位) 来填充。向左移动 n个位置,就等同于除以 2的n次方。只适用于: int/short/long/char 等定点数类型(float/double浮点数类型不能使用)
算术运算
+ | 加 | x = 5 + 3; | |
- | 减 | x = 5 - 3; | |
* | 乘 | x = 5 * 3; | |
/ | 除 | x = 10 / 3; | 两个整数相除,结果取整数部分除数不能为0(也不要为0.0) |
% | 取余 | x = 10 % 3; //结果为1 | 只有整数和char类型可以做%运算 float和double类型不能做%运算 |
赋值运算
x = 10; //把x的值设置为10, 把10写到变量x中。
x = 10 + a;
左边必须是变量,“优先级”很低,只比 ","(逗号元素符)高。
复合赋值运算
x += 10; // x = x + 10
x -= 10; // x = x - 10
类的还有: *= , /=, %= 等。
自增自减运算
后缀自增 | x = i++; | x = i; i=i+1; | 先取值 再自增(自减) |
后缀自减 | x=i--; | x =i; i=i-1; | |
前缀自增 | x = ++i; | i=i+1; x=i; | 先自增(自减) 再取值 |
前缀自减 | x = --i; | i=i-1; x = i; |
逗号运算符
优先级最低。
#include <stdio.h>
int main(void) {
int x;
// 先计算 x = 3+5, 再计算3*5
x = 3+5, 3*5, 10/5;
printf("x=%d\n", x); //x=8//取最后一个表达式的值,作为整个“逗号表达式”的值
x = (3+5, 3*5, 10/5);
cout << x << endl; //x=2
return x;
}
三目运算符
条件 ? 表达式1 :表达式2
如果条件为真,就取表达式1作为整个表达式的值。如果条件为假,就取表达式2作为整个表达式的值
#include <iostream>
#include <Windows.h>
using namespace std;int main(void) {
int salary;
scanf("%d", &salary);
cout << (salary > 30000 ? "老鸟" : "菜鸟") << << endl;
system("pause");
return 0;
}
使用多个运算符时的优先级
一共有15个级别!不需强制记忆,只需要掌握以下常用的优先级:
最高优先级:( )和[ ]
最低优先级:逗号表达式
倒数第二低优先级:赋值和复合赋值(=, +=, -= ...)
x = a+ b*c;
! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
(3 + 4 < 5 && 6 > 7) || (8 > 7);