zoukankan      html  css  js  c++  java
  • c语言操作符总结

    分类:

    • 算术操作符
    • 移位操作符
    • 位操作符
    • 赋值操作符
    • 单目操作符
    • 关系操作符
    • 逻辑操作符
    • 条件操作符
    • 逗号表达式
    • 其他操作符(下标引用、函数调用和结构成员)

    一、算数操作符

    1、算术操作符包括:+  、— 、 *  、/ 、%

    2、加、减、乘操作符和平常数学中的运算法则相同。

    3、除法操作符左右两边操作数为整型,则执行整数除法,只要有一个操作数为浮点型,则执行浮点型除法。

    4、取余操作符左右两边操作数必须为整数。

    二、移位操作符

    1、移位操作符包括:<<  左移操作符,>> 右移操作符 

    2、左移操作符移位规则:左边抛弃,右边补0

    //正数:原码=反码=补码 
       //负数:反码=原码除符号位取反  补码:反码+1 
       int num = 10;    //00000000 00000000 00000000 00001010
           num << 2;    //00000000 00000000 00000000 00101000
       int num = -10;   //11111111 11111111 11111111 11110110
           num << 2;    //11111111 11111111 11111111 11011000//正数:原码=反码=补码 
       //负数:反码=原码除符号位取反  补码:反码+1 
       int num = 10;    //00000000 00000000 00000000 00001010
           num << 2;    //00000000 00000000 00000000 00101000
       int num = -10;   //11111111 11111111 11111111 11110110
           num << 2;    //11111111 11111111 11111111 11011000

    3、右移操作符移位规则:

        逻辑移位:右边抛弃,左边用0填充

        算数移位:右边抛弃,左边用原数字的符号位填充

    int num = -1;   //11111111 11111111 11111111 11111111
           num >> 1;              
          //算数移位: //11111111 11111111 11111111 11111111
          //逻辑移位: //01111111 11111111 11111111 11111111
       int num = 2;    //00000000 00000000 00000000 00000010
           num >> 1;              
          //算数移位: //00000000 00000000 00000000 00000001
          //逻辑移位: //00000000 00000000 00000000 00000001

    注意:移位操作符移动的是二进制位,不能移动负数位。

    三、位操作符

    1、位操作符包括:&按位与  、|按位或  、^按位异或

    2、两个数字相同异或等于0,0和任何数字异或得该数字

    3、给定一组数字,除一特殊数字外,其他都成对出现,找出该数字:异或所有数字 

    //不创建临时变量,实现两数字交换
       int a = 10;
       int b = 20;
       a = a^b;
       b = a^b;
       a = a^b;
       printf("a = %d	b = %d
    ",a,b);
    //求一整数在内存中的二进制中1的个数
       int num = -1int i = 0;
       int count = 0;
       while(num))
       {
           count++; 
           num=num&(num-1)
       } 
       printf("二进制中1的个数:%d",count);

    四、赋值操作符

    1、普通赋值操作符:=

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

     int a = 10;
       int x = 20;
       int b = a+x;
           x += 2;
           a *=2;

    五、单目操作符

    1、单目操作符包括:

    !逻辑反   //一般用于表示真假

    - 负值

    + 正值

    & 取地址

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

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

    -- 前置、后置--

    ++ 前置、后置++

    * 间接访问操作符

    (类型) 强制类型转换

    2、sizeof()为操作符,不为sizeof()函数,()中可以为类型,也可为变量,为变量时()可以去掉,()中为数组名计算的是数组字节数

    3、数组名arr取的是数组首元素的地址,&arr取的是整个数组的地址  //int (*p3)[10]=&arr;  p3是一个数组指针

    4、关于数组名的扩充:

    • 数组名可以表示整个数组  : (1)、sizeof(数组名)(2)、&数组名
    • 数组名可以表示首元素地址  : 除以上两种情况外,数组名都表示首元素地址
    void test1(int arr[])
    {
        //计算传来首元素指针大小 
        printf("%d
    ",sizeof(arr));//4
    }
    void test2(char ch[])
    {
        //计算传来首元素指针大小 
        printf("%d
    ",sizeof(ch));//4
    }
    int main()
    {
        int arr[10] = {0};
        char ch[10] = {0};
        //计算数组的字节大小 
        printf("%d
    ",sizeof(arr));//40
        printf("%d
    ",sizeof(ch));//10
        test1();
        test2();
    }
       

    六、关系操作符

    1、关系操作符包括:> 、>= 、< 、<= 、!= 、==

    2、注意等于时用==,=为赋值操作符

    七、逻辑操作符

    1、逻辑操作符包括:&&逻辑与 、||逻辑或

    2、对于逻辑与,左边为假,后边都不运算

    3、对于逻辑或,左边为真,后边都不运算

    int i = 0,a = 0,b = 2,c = 3,d = 4;
        i = a++ && ++b && d++; 
        printf("%d %b %b %b",a,b,c,d);//1 2 3 4
        i = a++ || ++b || d++; 
        printf("%d %b %b %b",a,b,c,d);//2 2 3 4

    八、条件操作符

    exp1 ? exp2  :exp3

    九、逗号表达式

    exp1 ,exp2  , exp3,……expN

    逗号表达式,就是用逗号隔开的多个表达式。逗号表达式,从左到右执行,整个表达式的结果是最后一个表达式的结果

    十、其他表达式(下标引用、函数调用和结构成员)

    1、[ ]下标引用操作符

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

    2、()函数调用操作符

    接受一个至多个操作数,第一个为函数名,其他给函数传递实参

    3、访问一个结构成员

    • 结构体.成员名

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

  • 相关阅读:
    谈谈我对雾霾的看法
    2016年书单分享
    我的面试心得:面试官视角
    Cesium原理篇:GroundPrimitive
    Cesium原理篇:Batch
    Peter Hessler和他的中国三部曲(上)
    Cesium原理篇:Material
    全球PM25实时可视化
    Cesium原理篇:Property
    次郎的寿司梦
  • 原文地址:https://www.cnblogs.com/nbsun/p/10667809.html
Copyright © 2011-2022 走看看