C语言操作符

操作符的分类

1 算术操作符

2 移位操作符

3 位操作符

4 赋值操作符

5 单目操作符

6 关系操作符

7 逻辑操作符

8 条件操作符

9 逗号表达式

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


1 算术操作符

C提供了所有常用的算术操作符:

+  -  *  /  %

注:(1)除了%操作符外,其余几个操作符都是既适用于浮点型类型又适用于整数类型;

   (2)当/操作符的两个操作数都是整数时,它执行整除运算,在其他情况下则执行浮点数除法;

   (3)%操作符的两个操作数必须为整数。返回的是整除之后的余数。

2 移位操作符

移二进制序列,移位是正数位

(1)<< 左移操作符

移位规则:左边丢弃,右边补0;

注:a<<1;  //此操作a没有被赋值,自身的值不会变化

    a = a<<1;   //a被赋值,值发生改变 

>> 右移操作符

移位规则:逻辑移位:左边用0填充,右边丢弃

                 算术移位:左边用原先该值的符号位填充,右边丢弃

由编译器决定选择逻辑右移还是算术右移。

3 位操作符

操作数必须是整数

按位与 &

A&B

0

1

0

0

0

1

0

1

按位或 |

A|B

0

1

0

0

1

1

1

1

 按位异或 ^  

A^B

0

1

0

0

1

1

1

0

例子:int a = 1,b = 2;

      //001 a

      //010 b

      a&b = 0;    //000

      a|b = 3;    //011

      a^b = 3;    //011

4 赋值操作符

(1)结合性:从右至左

例如:a = x = y + 3相当于 a = (x = y + 3)

(2)复合赋值符:+=  -=  *=  /=  %=  <<=  >>=  &=  ^=  |=  

例如:x = x + 3相当于x += 3

5 单目操作符

逻辑反操作

产生一个整型结果,0或1

-

负值

 

+

正值

 

&

取地址符

 

~

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

原先为1的位变为0,原先为0的位变为1

sizeof

操作符的类型长度(单位是字节)

产生操作数的地址

--

前置、后置--

 

++

前置、后置++

 

*

间接访问操作符(解引用操作符)

用于访问指针所指向的值

(类型)

强制类型转化

 

注:(1)&arr表示整个数组的地址;sizeof(arr)表示整个数组的长度,单位是字节。

int arr[10] = {0};
printf("%d\n", sizeof(arr));   //40 打印整个数组的长度
printf("%d\n", sizeof(arr+0));   //4 打印数组首元素的长度

(2)数组传参传首元素地址,数组传参时不能在函数内求数组个数。

viod test(int arr[])
{
   int i = 0;
   for(i=0; i<5; i++)
   {
      printf("%d\n",arr[i]);
    }
}
int main()
{
   int arr[5]={1,2,3,4,5}
   test(arr);
   return 0;
}

(3)打印类型的长度必带括号,如printf(“%d\n”,sizeof int)这条语句没有给int加(),所以是错误的写法。

 

int a = 10;
printf("%d\n", sizeof(a));   //打印a的长度
printf("%d\n", sizeof(int));   //打印int型的长度
printf("%d\n", sizeofa);   //打印a类型的长度
//前面三个printf语句是相同的
printf("%d\n", sizeofint);   // error 打印类型的长度必须给类型带上括号

(4)前置++和--:先++(--),后使用;后置++和--:先使用,后++(--)。

关于单目操作符一些例子:

int a = 10;
int *pa = &a;
int **ppa = &pa;  //二级指针
int ***pppa =&ppa;   //三级指针
int arr[10] = {0};
printf("%p\n", arr);   //打印首元素地址
printf("%p\n", &arr[0]);   //打印首元素地址
printf("%p\n", &arr);   //打印整个数组的地址
int a = 0;
int s = 2;
printf("%d\n", sizeof(s=a+3));   //输出结果是2;此语句中“s=a+3”并没有实现赋值的功能
printf("%d\n", s);   // 输出结果是2
int a = 10;
int *pa = &a;
*pa = 20;   //此语句中的*是间接访问操作符

6 关系操作符

>   >=   <   <=   !=   ==

7 逻辑操作符

&&   逻辑与(一假即假)

||    逻辑或(一真即真)

8 条件操作符

(表达式1) ? (表达式2) : (表达式3)

注:如果表达式1成立,则执行表达式2;否则,执行表达式3。

例子:求两个数中的较大值

int a = 10;
int b = 0;
int max = a>b?a:b;

9 逗号表达式

(表达式1),(表达式2),(表达式3),(表达式4),……,(表达式n)

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

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

(1) 下标引用操作符 []   操作数:一个数组名+一个索引值

(2) 函数调用操作符 ()   操作数:函数名+传递给函数的参数

(3) 访问一个结构的成员    . 结构体.成员名   ->  结构体指针->成员名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值