• C语言:操作符详解(1)


    1.算数操作符:

    “+” “-” “*” “/” “%”

    注意点:

    %号 只能用于整数

    2.除数不能为0

    /号,如果两数都是整数,结果为整数;如果有一个数为小数,结果为小数。

    整型提升:凡是针对char,short型的数学运算,此时都会隐式转换为 int 型

    (因为CPU运算一般以整型为基本单位)

    算数转换:

    long double

    double 8个

    float 4个

    unsigned long int

    long int 4个

    long long 8个

    unsigned int

    int 4个

    short 2个字节

    如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。

    警告: 但是算术转换要合理,要不然会有一些潜在的问题。

    2.移位操作符

    “<<” 左移操作符 左移相当于乘以2

    ">>"右移操作符 右移相当于除以2

    左移操作符:左边抛弃,右边补0

    右移操作符:1. 逻辑移位 :左边用0填充,右边丢弃

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

    符号位就是最高位,代表这个十进制数的正负:

    最高位如果是0,就是正数,

    最高位如果是1,就是负数,

    对于移位运算符,不要移动负数位,这个标准是未定义的
    例如:int num=10;
    num>>-1;

    3.位操作符(都是二进制位来说,双目操作符)

    & 按位与 两个操作数都为1,结果才是1

    | 按位或 两个操作数都为0,结果才是0

    ^ 按位异或 两个操作数相同,结果是0,两个操作数不相同,结果是1

    ~ 按位取反 按位取相反数 0变成1,1变成0

    4.赋值操作符(双目操作符)

    复制操作符最常见的就是“=”,赋值操作符可以连续使用,连续赋值

    复合赋值操作符:

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

    5.单目操作符

    ! 逻辑反操作

    负值

    正值

    & 取地址

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

    (如果要计算数组的长度,则数组在哪里定义,在哪里计算)

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

    “–” 前置、后置–

    “++” 前置、后置++

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

    (类型) 强制类型转换

    注意:* 间接访问操作,这个会在指针里面广泛用到。

    ++i,–i 先运算,再使用

    i++,i-- 先使用,再运算

    6.关系操作符

    =

    <

    <=

    != 用于测试“不相等”

    == 用于测试“相等”

    7.逻辑操作符

    && 逻辑与 两个条件同时满足

    || 逻辑或 两个条件至少满足一个

    特别:

    短路性:&&左侧表达式为假时,右侧表达式不会进行求值

    ||左侧表达式为真时, 右侧表达式不会进行求值

    8.条件操作符(C语言中唯一 一个三目运算符)

    exp1 ? exp2 : exp3

    exp1 为真 结果为exp2 为假 结果为exp2

    9.逗号表达式

    exp1, exp2, exp3, …expN

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

    练习:

        int a=-16;
        int b=a>>1;//右移操作符,移动的是二进制位
        //存储到内存的是补码
        //右移操作符:
        //1、算术右移:右边丢弃,左边补原符号位(通常一般都是该种右移)
        //2、逻辑右移:右边丢弃,左边补0
        printf("%d\n",b);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
        int c=5;
        int d=c<<1;
        printf("%d\n",d);
        //左移操作符:左边丢弃,右边补0
    
    • 1
    • 2
    • 3
    • 4
    &--按位与,两个都是1才为1,只要有一个是0则为0
        int e=3;
        int f=5;
        int g=e&f;
        printf("%d\n",g);
    
     |--按位或,两个都是0才为0,只要有一个是1则为1
        int h=3;
        int i=5;
        int j=h|i;
        printf("%d\n",j);
    
     ^--按位异或,相同为0,相异为1
        int k=3;
        int l=5;
        int m=k^l;
        printf("%d\n",m);
        //C语言中没有同或符号,但是只要取异或的非即可,例如: m=!(k^l)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
        int n=10;
        char o='r';
        char*p=&c;
        int arr[10]={0};
        printf("%d\n",sizeof n);//4 此处可省略n的括号
        printf("%d\n",sizeof(int));//4 类型不能省略括号
        printf("%d\n",sizeof(o));//1 字符类型为1
        printf("%d\n",sizeof(char));//1
        printf("%d\n",sizeof(p));//8或者4 指针大小看是64位还是32位
        printf("%d\n",sizeof (char*));//8 指针的类型
        printf("%d\n",sizeof(arr));//40
        printf("%d\n",sizeof(int [10]));//40 数组去掉名字,等号前面的就是数组的类型
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    Docker安装Apollo
    LabVIEW调用MathScript Window
    软件测试/测试开发丨Python安装指南(macOS)
    线路中边桩任意里4800
    c++ 要求用户输入整数时的风险
    pair
    AI实用技巧 | 5分钟将coze集成到微信群机器人
    从0开始C++(五):友元函数&运算符重载
    java计算机毕业设计上虞烟草物流配送系统源码+系统+数据库+lw文档+mybatis+运行部署
    计算机毕设之基于Hadoop+springboot的物品租赁系统的设计与实现(前后端分离,内含源码+文档+教程)
  • 原文地址:https://blog.csdn.net/qq_57430594/article/details/127689463