C语言的操作符

来源:互联网 发布:郭靖 杨过 知乎 编辑:程序博客网 时间:2024/06/05 04:54
算数操作符
+     -    *    /    %
需要注意的是  1.浮点数的除法,两个数中至少有一个是浮点数
  2. %运算的两个数字必须是整数

移位操作符
<<  左移      a<<1 二进制的a左移一位   但是a的值是不变的,移位只是这个表达式的结果
>>  右移     如果想让移位后改变a的值 ,可以 a>>= 1;  移位再赋值

!!!!因为计算机内只有加法器,而除法是通过加法算出来的,左移移位相当于给原来的数字乘2右移相当于除2,所以在条件允许的情况下,可以用移位运算代替除2,这样会提高效率。

位操作符
&   按位与   同真为真
|     按位或   有真为真
^    异或     两个数字相同为0,不同为1      //一个数字和自己异或是0;和0异或是本身。


赋值操作符
=
有可能出现这样的情况   a = x = y+1;  //连续赋值,相当于 x = y +1; a = x; 但是不建议这么写

复合赋值符号
+=   -=  /=   %=   >>=   <<=  &=  |=   ^=
计算的顺序是  a += 1;  等同与 a = a+1;  其它的类似

单目操作符
!      -     +         &          sizeof()       --        ++        *
非    负   正    取地址    计算大小     自减    自增    间接访问操作符
单目操作符就是只有一个量参与运算。
注意:
sizeof();这是一个操作符而不是一个函数 ,sizeof()操作符在编译时就已经计算出结果,所以它是一个操作符;而且在sizeof的操作数为一个数或者变量时可以没有(),而时int 这种类型时就必需有括号。

*  间接访问操作符 
通常我们定义一个指针时是这么写的   int   *p = NULL;   但也可以这么写   int*    p;    int*是类型,p是指针变量。  p = &a;   *p = 20;    这个的意思是根据p的地址找到a赋值为20,所以*叫做间接访问操作符。

强制类型转换
使用说明
int   num  = 0;
float f = 3.14f;
num = f;   //将一个长度大的类型赋值给一个短的时可能会丢失数据,所以要写成  num  = (int)f;

关系操作符
>     <   ==   >=   <=    !=
用于比较,判断

逻辑操作符号
&&                ||
逻辑与      逻辑或
注意:if(a > b && b<c &&c >d)
    { }     //当a>b不成立时这个表达式就不判断后面的了,同理,如果为||时,一个为真后面就不判断了

条件操作符(也叫三目操作符)
exp1 ?   exp2 : exp3;
举例:  a>5 ?  b=3: b=4;   //如果a>5,那么b就等于3,否则等于4;
通常这么用   b = a>5 ? 3: 4;
因为,这个表达式的意思是:如果表达式一为真,那么整个表达式的结果就是第二个表达式!!!

逗号表达式
exp1, exp2, exp3,......expn;
逗号表达式是从左往右运算的,但整个表达式的结果是最后一个表达式的结果

下标引用操作符
[  ]
这个符号是有两个操作数的,一个是数组名,一个是下标。

函数调用操作符
()
一个或者多个操作数,函数名+参数个数;

结构成员操作符
.      ->
定义一个结构体
struct   Stu    //struct  Stu这两个合起来叫做结构体名,Stu只是个标签
{
char name[20];
int age ;
int height;
}

结构体在创建时不会在内存中开辟空间,而在实例化时才会开辟
int   main()
{
struct    Stu   s;    //这里呢我们定义一个结构体变量
s.name = "zhangsan";     //然后再给这个变量的各个属性赋值,但会发现给name赋值时会报错
s.age = 19;                      因为name是数组的首地址,而地址是一个值,你不能把一个值赋给
...                                     另外一个值,所以要用strcpy(s.name,"zhangsan");
return 0;
}

而->    结构体在传参数时,不传变量,而要传地址
所以在定义函数时,参数我们定义一个Stu   *p;
我们就可以这样访问它的属性  p -> age;它的效果相当于  (*p).age;