今天,我学习并掌握了非常有用的操作符。操作符分为:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符以及逗号表达式等。
首先,(1)算术操作符有:+ - * / %. 1。
除了%操作符外,其他的几个操作符可以用于整数和浮点数。
对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
%操作符的两个操作数必须为整数。返回的是整除后的余数。
(2)移位操作符:<<左移操作符,>>右移操作符
左移操作符:左边抛弃,右边补0.虽然数被移位,但是在没被赋值的情况下,自身的值不会变。
右移操作符:1.逻辑移位:左边用0填充,右边丢弃。2.算术移位:左边用原该值的符号位填充,右边丢弃。
并且右移相当于给这个数除以2.
警告:对于移位运算符,不要移动负数位,这个是标准未定义的。例如:int num=10;num>>-1;//error
(3)位操作符:& //按位与 | //按位或 ^ //按位异或
注:他们的操作数必须是整数。
经典例题:不加临时变量交换两个数的值。
#include<stdio.h>
#include<math.h>
#include<windows.h>
int main ()
{
int a=10;int b=15;
a=a^b;
b=a^b;
a=a^b;
printf("a=%d,b=%d\n",a,b);
system("pause");
return 0;
}
(4)赋值操作符:是一个很棒的操作符,它可以让你得到一个你以前不满意的值。也就是你可以给自己赋值。同时,赋值操作符也可以连续使用。
它还有复合赋值符:+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=等等。
比如:intx=10;x=x+10;x+=10;后两句意思是一样的。
(5)单目操作符:!:逻辑反操作。-:负值。+:正值。&:取地址。Sizeof:操作数的类型长度(以字节为单位。)~:对一个数的二进制按位取反。--:前置、后置--。++:前置、后置++。*:间接访问操作符(解引用操作符)。(类型):强制类型转换。
Sizeof和数组例题:
#include<stdio.h>
#include<math.h>
#include<windows.h>
void test1(int arr[])
{
printf("%d\n",sizeof(arr));
}
void test2(char ch[])
{
printf("%d\n",sizeof(ch));
}
int main ()
{
intarr[10]={0};
charch[10]={0};
printf("%d\n",sizeof(arr));
printf("%d\n",sizeof(ch));
test1(arr);
test2(ch);
system("pause");
return0;
}
由此看出数组在进行函数传参时,会发生降维问题,一维数组会降为一级指针。
(6)关系操作符:>, <, ==, !=, >=, <=.
陷阱:x=get_value();
if(x=5)
这里看似x等于5就执行事务处理,实际上代码不是这个意思。我们将==搞成了=,这样这个事务无论什么情况都会执行。
警告:在编程过程中==和=不要写错。
(7)逻辑操作符:&&:逻辑与。||:逻辑或。
区分逻辑与和按位与,区分逻辑或和按位或
1&2=0
1&&2=1
1|2=3
1||2=1
例题:
#include<stdio.h>
#include<math.h>
#include<windows.h>
int main ()
{
inti=0,a=0,b=2,c=3,d=4;
i=a++&&++b&&d++;
printf("a=%d\nb=%d\n c=%d\n d=%d\n",a,b,c,d);
system("pause");
return0;
}
(8)条件操作符:exp1?exp2:exp3
练习:
If(a>5)
B=3;
Else
B=-3;
a>5?3:-3;
(9)逗号表达式:exp1,exp2,exp3,…expN
逗号表达式:就是用逗号隔开的多个表达式。
从左到右依次执行,整个表达式的结果是最后一个表达式的结果。