c语言操作符总结

                              c语言操作符总结

一、算数操作符 +. -. *. /. %

1.  %操作符的两个操作数必须为整数。返回的是整数之后的余数。

2. %操作符之外,其他几个操作符可以作用于整数和浮点数。

3.  /操作符的两个操作数是整数的话,执行整数除法;只要有浮点数执行的话,就执行浮点数除法。

二、移位操作符 <<  >>

1. << 左移操作符

  移动规则:左边抛弃,右边补0。

    左移1位相当于该数乘以2,左移2位相当于该数乘以2*2=4,15<<2=60,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。
  假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移一位时溢出的是0

,而左移2位时,溢出的高位中包含1。

 

2. >> 右移操作符

  移动规则:  

(1)逻辑移位:左边用0填补,右边丢弃。

(2)算数移位:左边用原该值的符号位填补,右边丢弃。

    一般用算数移位,右1位相当于该数2

三、位操作符 & | ^

1.   &按位与

    如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。

 1)将二进制数中的某一位置0或者置1

例:将下面的1置0

00000000 00000000 00000000 10011001

<===11111111 11111111 11111111 11110111

按位取反

<===00000000 00000000 00000000 00001000

1左移3位

<===1<<3

(2)清零

    若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:

原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。

2. 按位或 |

    两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真

3. 按位异或 ^

   a^a=0  0^a=a

交换两个值,不用临时变量

c语言源代码:
#include <stdio.h>
main()
{
int a=3;
int b = 4;
a=a^b;
b=b^a;
a=a^b;
printf("a=%d b=%d",a,b);

四、赋值操作符

赋值操作符可以让你得到一个你之前不满意的值。

    复合操作符:+=.-=.*=./=.>>=.<<=.&=.|=.^=

五、单目操作符

1. 逻辑反操作

   a=10;     !a=0;

2. 负值 -

   a=10;  -a=-10;

3. 正值 +

4. 取地址 &

   printf(“%p”,&a);

   printf(“%x”,&a);

5. 操作数的类型长度(以字节为单位) sizeof

   sizeof不是函数;

6. 前置、后置 --

      1-- 先使用后自加;--1先自减后使用

7. 前置、后置 ++

      1++ 先使用在自加;++1 先自加后使用

8. 间接访问操作符 * (指针变量)

  int a=10;

  int *p=&a;

*p=20;  //int*是整形指针类型,不是操作符;  p是变量名,p的类型是int*;  p存a的地址;

9. 强制类型转化 ()

  int num =0;

  float f=3.14f;

  num=(int)f;

  f为float 类型转换为int类型

10. 对一个数的二进制按位取反 ~

  int a=0;

  ~a=-1;

六、关系操作符

> 、>= 、< 、<=、!=、==

== 等于

= 赋值

七、逻辑操作符

&& 逻辑与

||逻辑或

区分逻辑与和按位与:

1&2 -->01 10-->0

1&&2-->真 真-->1

  区分逻辑或和按位或

   1|2-->01|10-->11-->3

   1||2-->真|真-->真

八、条件操作符  

三目操作符  exp1 ? exp2 :exp3

Eg; b=(a>5)? 3:(-3); //判断a是否大于5,如果大于,则将a等于3的值赋值给b;否则将a等于-3的值赋值给b。

Eg:max=(a>b)? a:b;  //求两个数中的最大值。

九、逗号操作符

 exp1 , exp2 ,exp3 ,exp4 ......expN

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

十、下标引用、函数调用和结构成员

 1、[]

  操作数:一个数组名,一个索引值

  int arr[10];//创建数组

  arr[9]=10;//实用下标引用操作符

2、()

     函数调用操作符

     接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

Eg:

#include <stdio.h>

void test1()

{

printf("hehe! ");

}

void test2(const char *str)

{

priintf("%s ",str);

}

int main()

{

  test1();//()不能省略

  test2(“hello world!”);

return 0;

}

3、访问一个结构体成员

  .结构体.成员

  ->结构体指针->成员名

Eg:

#include <stdio.h>

struct Stu //类型

{

char name[10];

int age;

char sex[5];

double score;

};//分号不能省略

void set_age2(struct Stu* pStu)

{

pStu->age=18; //结构体成员访问

}

int main()

{

    struct Stu stu; //stu是对象

struct Stu* pStu=&stu; //结构体成员访问

stu.age=20; //结构体成员访问

set_age1(stu);

pStu->age=20; //结构体成员访问

set_age2(pStu);

return 0;

}

原文地址:https://www.cnblogs.com/xjq6898/p/7712866.html