c语言操作符总结

操作符

分类:

算数操作符 
移位操作符 
位操作符 
赋值操作符 
单目操作符 
关系操作符 
逻辑操作符 
条件操作符 

逗号操作符 

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



移位操作符

<< 左移位操作符 >>右移位操作符

1.左移操作符

移位规律:左边丢弃,右边补0 
2.右移操作符
移位规律: 
(1)逻辑右移:右边丢弃 ,左边补0
(2)算数右移:左边移入的位取决于符号位(符号位为1,用1填充;符号位 为0,用0填充)

标准说明: 
无符号值执行所有移位操作默认就是逻辑移位;但对于有符号数,到底采用逻辑移位还是算术移位就取决于编译器。 
左移一位有乘2的效果,右移一位有除2的效果(左移右移的效率要比乘除高)。

警告:
对于移位操作符,不要移动负数位,这个是标准未定义的。

int num = 10;

num >> -1; error




算数操作符

+ 加、- 减、* 乘、/ 除、% 模运算或求余


1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。 
2.对于/操作符,如果两个操作符都是整数,执行整数除法。而只要有浮点数就执行浮点数除法。 

3.%操作符左右两个操作数必须是两个整数,返回值是余数而不是商。



位操作符


1.A&B :同一为一
2.A|B :同零为零
3.A^B :相异为一 

说明:他们的操作符必须为整数。

//不能创建临时变量(第三个变量),实现两个数的交换

#include<stdio.h>
int main()
{
    int a = 10;
    int b = 20;
    a = a^b;
    b = a^b;
    a = a^b;
    printf("a=%d,b=%d", a, b);
    system("pause");
    return 0;
}

赋值操作符

(1)一般赋值操作符:=,允许出现表达式的地方都允许出现赋值

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


单目操作符

!       逻辑取反操作,这个操作符产生一个整型结果0或1

~       对一个数的二进制按位取反(包括符号位)

++      前置、后置++

--        前置、后置--

  • 产生操作数的正值

  • 产生操作数的负值

&        取地址

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

(类型) 强制类型转换

[cpp]  view plain  copy
  1. #include<stdio.h>  
  2.      int main()  
  3.      {  
  4.      int num=0;  
  5.      float f=3.14;  
  6.      num=(int)f;  
  7.      printf("num=%d\n",num);  
  8.      system("pause");  
  9.      return 0;  
  10.      }  

sizeof  判断它操作数的类型长度(以字节为单位)

  1. ++:

        后置++:先使用,后++
        前置++:先++,后使用
        后置--:先使用,后--
        前置--:先--,后使用
  2. &: 
    int arr[10]={0}; 
    printf(“%p”,&arr);//数组的地址 
    printf(“%p”,&arr+1);//跳过整个数组的下一个地址,地址+40字节 
    printf(“%p”,arr);//数组首地址 ,也是数组名
    printf(“%p”,arr+1);//数组的第二个元素地址,地址+4字节

  3. sizeof: 
    int a=10; 
    printf(“%d”,sizeof(a));//4 
    printf(“%d”,sizeof a);//4 
    printf(“%d”,sizeof(int));//4 
    sizeof(数组名)——数组名表示整个数组,求取的是整个数组的大小,单位字节

        sizeof(&a)//4  地址占四个字节

        &数组名——数组名表示整个数组,取出的是整个数组的地址

#include<stdio.h>
int main()
{
int a=10;
int  b=20;
printf("%d",sizeof(b=a+5));//sizeof中表达式不参与运算
printf("%d%d",a,b);
return  0;
}
// 10  20


关系操作符


逻辑操作符


(1) &&操作符的左操作数总是先进行求值,若值为真,紧接着对右操作符进行求值,若值为假,右操作符不在求值。

(2) ||操作符的左操作数总是先进行求值,若值为真,右操作符不在求值。



条件操作符

条件操作符接受三个操作数。用法如下:

expression1 ?  expression2 :  expression3

首先计算的是expression1,如果它的值为真(非零值),那么整个表达式的值就是expression2的值,expression3不会进行求值。但是,如果expression1的值是假(零值),那么整个条件语句的值就是expression3的值,expression2不会进行求值。


逗号操作符

用法如下:expression1expression2...... expressionN

逗号操作符将两个或多个表达式分隔开来。这些表达式自左向右逐个进行求值,整个逗号表达式的值就是最后那个表达式的值。


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

  1. [] 
    操作数:一个数组名+一个索引值 
    双目操作符
  2. ()函数调用操作符 
    接受一个或者多个操作数:第一个操作数是函数名,剩余操作数是传递给函数的参数, 
    printf(”%p”,APP);//取出的是函数地址和&APP没有区别

  3. 访问结构成员操作符 
    . 结构体.成员名 
    -> 结构体指针->成员名


表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。

隐式类型转换:

c的整型算数运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换成普通整型,这种转换称为【整形提升】。

算数转换:

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,,否则操作就无法进行。下面的层次体系称为【寻常算数转换】。

long double
double
float 
unsigned long int
long int
unsigned int 

int 

C在以下四种情况下会进行隐式转换: 
1、算术运算式中,低类型能够转换为高类型。 
2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。 
3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。 
4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。

2、算数运算的隐式转换 
算数运算中,首先有如下类型转换规则: 
1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。 
2、short型转换为int型(同属于整型) 。 
3、float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。 
其次 
当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。


操作符属性

     1.操作符的优先级

     2.操作符的结合性

     3.是否控制求值顺序

                                                                 

  



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值