C语言操作符

来源:互联网 发布:gmp系统网络的搭建 编辑:程序博客网 时间:2024/06/05 11:49

移位表达式

左移操作符<<

  左边抛弃,右边补零

右移操作符>>

  1.逻辑右移

  左边补零,右边丢弃

  2.算数右移

  左边补符号位,右边丢弃

注意:

  1.左移一位相当于乘2,右移一位相当于除2,并且在内存中存放的是二进制的补码,且移位操作符只对int型数操作

  2.移位操作符不要移动负数位,这个标准未定义

位操作符

&    //按位与|    //按位或^    //按位异或注:操作数必须是整数,并且是补码**
a & a = 0;a & 0 = a;

举例:

  将0000 0000 0011 1111从右往左数的第5位的1变为0

  解:0000 0000 0011 1111 & 1111 1111 1110 1111 = 0000 0000 0011 1111

   将0000 0000 0011 1111从右往左数的第7位的0变为 1

   0000 0000 0011 1111 | 0000 0000 0100 0000 = 0000 0000 0111 1111

赋值操作符 =

int x = 0;int x = 10;

符合赋值符

+=-=*=/=%=>>=<<=&=|=^=

单目操作符

!               //逻辑反操作-               //负值+               //正值&               //取地址sizeof          //不是函数~               //二进制数按位取反--++(类型)           //强制类型转换**

  temp = ++a;是先加1,再使用,等价于 a = a + 1,temp = a;

  a ++;先使用,后加1,相当于 temp = a, a = a + 1;

**int a[10] = {0};   //32位sizeof(a)            //40sizeof(&a)           //4&a                   //表示整个数组的地址,表示整个大小,加1则会在内存中跳过整个数组a                    //表示数组首元素的地址,加1则是跳过一个数组元素**//sizeof(表达式) /*表达式的结果不计算,因为sizeof在编译时就有,而当a,和b是全局变量时,他们的创建是在程序执行是才创建,所以,sizeof()中括号的值不看值,只看它的类型*/

关系操作符

>< <= !=  ==

逻辑与逻辑或

  逻辑与&&:当遇到一个表达式为0,后面的都不计算,整个表达式为0

  逻辑或&&:当遇到一个表达式为1,后面的都不计算,整个表达式为1

条件操作符

exp1 ? exp2 : exp3等价于if(exp1) {exp2}else{exp3}

逗号表达式

exp1,exp2,exp3.../*表达式计算时从左到右计算,但整个表达式的值为最右边的表达式的结果,计算时必须计算左边的表达式,因为左边有可能会影响右边表达式的值*/

下标引用 函数调用及结构成员

1.[]

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

int arr[9] = {0};  //类型为int [9],类型为去掉变量名剩下的都是类型[]的操作数为两个 arr和9

2.()

  函数调用操作符,接受一个或多个操作数,第一个为函数名,其余都是参数

3.访问一个结构的成员

  .结构体.成员名

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

注意:

#include<stdio.h>int main(){    int arr[] = {0};    scanf ("%d",arr);         //arr为数组首地址的值,当arr + 1时,数组值跳过数组的一个元素的地址    scanf("%d",&arr);         //&arr为数组的地址,当&arr + 1时,数组在内存中便会跳过整个数组    sizeof(&arr);             //4    sizeof(arr);              //40                              //sizeof(数组名)此时的数组名表示的是整个数组    return 0;}