C语言中的操作符较多,且灵活,若能熟练使用,必成大器!
如下开始简介
1.算术操作符 **
算术操作符有+、-、*、/、%(整数求余)
(1)它们的结合性都是从左向右的。
(2)+、-、*、/的操作数可以是int型、float型、double型,%的操作数只能是整型。
(3)/:如果操作数都是整型,结果为整型。整数的得到并不是四舍五入,而是取整数部 分,舍去小数。如果操作数有一个是浮点型,则结果为浮点型。a/b为a除以b的值
(4)%:模数,求余符号。a%b得到的是a除以b的余数。
2.移位操作符 ***
左移操作符:<<
移位规则:左边抛弃,右边补0
运算规律为:给一个数左移n位,相当于乘以2的n次方。
右移操作符:>>
移位规则: 逻辑移位和算术移位(取决于编译器)。
(a)逻辑移位:左边用0填充,右边丢弃。
(b)算术移位(常用):左边用原该数的符号位填充,右边丢弃。
两者对数的运算都是先将数化为二进制数,再进行左右移操作,从而改变原数的值
2.位操作符 ****
& | 规则:先化为二进制数,一位一位&,同为1才为1。 |
| | 规则:先化为二进制数,一位一位|,同为0才为0。 |
^ | 规则:先化为二进制数,一位一位^,相同为假,相异为真。 |
按位异或实用示例:
int num1 = 10;
int num2 = 20;
//交换num1和num2且不实用第三变量的方法
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
//num1的二进制为00000000000000000000000000001010,
//num2的二进制为00000000000000000000000000010100,
//异或后num1= 00000000000000000000000000011110,
//异或后num2= 00000000000000000000000000001010,即变为num1.
//异或后num1= 00000000000000000000000000010100,即变为num2.
4.赋值操作符
赋值类型 | | |
普通赋值 | = | 赋值操作符的左侧必须为一个变量。可以用在给变量定义并初始化时,也可以用在定义后给变量赋值。 |
复合赋值 | +=、-=、*=、/=、%=、>>=、<<=、&=、|=、^= | 这些赋值符都是自右向左结合。 |
5.单目运算符
(1)! 逻辑反操作
用法:int a=10;printf("%d",!a); 结果 :0
(2)- 负值 R-L (表示从右向左结合)
(3)+ 正值 R-L
(4)sizeof操作数的类型长度(单位:字节)字符串计算时系统自动给字符串的末尾加上‘\0'.
(5)~ 对一个数的二进制按位取反。
//例
int a=5;
int b=~a;
printf("%d",b);
//5的二进制为00000000000000000000000000000101
//按位取反为 11111111111111111111111111111010
//最高位是1,说明是负数。负数以原码的补码存储在二进制中。
//原码转换补码的方法是:符号位不变,其它位按位取反,再给末位加1.反过来求:
//先减1,按位取反,符号位不变。所以b的原码是10000000000000000000000000000110,化为十进制为-6.
符号 | 作用 | 使用方法 |
-- | 自减 | --i :在使用i之前给i减1. i---: 在使用i之后给i减1. |
++ | 自增 | ++i:在使用i之前加1 i++:在使用i之后加1. |
& | 取地址 | int i; int* p; p=&i; 那么p存放的是i的地址。 |
* | 间接访问 | 对指针变量前加*可以间接访问指针变量所指向的变量 |
() | 强制类型转换 | int a=1; double b=(double)(a); 这就实现了把a的值先转换为浮点型后再赋给b |
6.关系操作符
有>、<、>=、<=、!=(测试“不相等“)、==(测试相等),多用于判断或循环结构。
较为简单不做解释,仅 强调 当判断相等时必须用 == 切记与 单个 = 的区别
8.条件操作符
(表达式1)?(表达式2):(表达式3) 判断表达式1,如果为真,则执行表达式2,否则执行表达式3.
如:c=a>b?a:b; 表示把a和b中的较大值赋给c。