zoukankan      html  css  js  c++  java
  • 运算符

    运算符(操作符,Operator):实现各种计算操作。

    数据对象(data object):用于储存值的数据存储区域。(变量名、数组名、指针等)
    左值(lvalue):用来标识或定位存储位置的标签。中间运算结果是常量,不能为左值。
    右值(rvalue):能赋值给可修改左值的量。

    后来添加了const限定符,有些左值变得不可修改,所以出现了可修改的左值(modifiable lvalue),也叫对象定位值(object locator value)来表示我们所说的左值。

    按运算功能分类:

    1)算数运算符:+、-、* 、/、%、++、--、- 运算结果是一个算术值

    加法运算符(addition operator)
    减法运算符(subtraction operator)
    除运算时,若是整除,商有小数名,取整数部分,称为截断(truncation)。
    浮点数的0可以当除数。
    求模运算符(modulus operator),两边必须为整数,运算结果的符号与被除数(前面的)相同。
    自增自减的操作数只能是变量。

    //k=++i 先加再返回。
    Int n = 8; int k = n--;//此时输出 n = 7; k=8;
    //k=i++ 先返回再加。
    Int n = 8; int k = --n;//此时输出 n = 7; k=7;
    

    2)关系运算符:>、<、<=、>=、 ==、!= 运算结果是一个逻辑值(布尔值)

    浮点数是用近似值表示的。“==”用于两个浮点数的判断时,由于存储误差,可能会得出错误结果。
    
      数学中:i<j<k;C语言中:即(i<j)<k,即(i<j && j<k)
    

    3)逻辑运算符:!、&&(与)、||(或) 运算结果是一个逻辑值,0为假,非0为真。

    对逻辑值进行运算:与像乘法,或像加法。
    整数都可以当成逻辑值计算。
    &&的前一个判断如果是假,则后面的不会执行,直接判断为假。
    同理,||的前一个判断如果是真,则后面的不会执行,直接判断为真。
    

    4)位运算符:<< 、>>、 ~(按位取反)、 |(按位或)、 ^(按位异或)、&(按位与)

     位运算符只支持整数,参加位运算的操作数会被转换成二进制。(或者说只能对二进制进行计算)然后根据每一位进行逻辑运算。
    按位与用来清零,按位或用来置位。
    按位异或:相同为0,相异为1;可以用来将指定的位反转。A^B^B=A 可以用于加密。
    
    	按位与(&):不管是什么&0都清零了,&1则不变。
        0   &   0         0
        0   &   1         0
        1   &   1         1
    
        3   0000 0011
    &   5   0000 0101
            0000 0001
    
        按位或(|):不管是什么|1都是1了(置1),|0则保持不变。
        0    |    0            0
        1    |    0            1
        1    |    1            1
    
        3     0000 0011
    |   5     0000 0101
        0000 0111
    
        按位异或(^):相同为0,相异为1;可以用来将指定的位反转。A^B^B=A 可以用于加密。
        0  ^  0          0
        1  ^  1          0
        1  ^  0          1
    
        3    0000 0011
    ^   5    0000 0101
        0000 0110    
    

    移位操作可以把数字的所有二进制位水平左右移动
    移动的位数可以指定
    左移使用<<表示
    右移使用>>表示
    操作符左边是要被移动的数字,右边是移动的位数
    移位操作符不要求左边必须是左值,因为不会去修改它

    移位操作会导致某些数位丢失,也会空出一些位置
    左移时右边空位置一定补0
    有符号数字右移时左边的空位置补充的是符号位
    无符号数右移时左边的空位置补0

    移位操作中如果没有丢失有效数据则右移n位相当于除以2的n次方,左移n位相当于乘以2的n次方

    算术右移(符号位不变,即高位补符号位,正数补0,负数补1)
    逻辑右移(高位补0)
    左移都是补0

    5)赋值运算符:=及其扩展的赋值运算符,右结合性。

     一般的运算符不会改变操作数的值。但是赋值运算符可以。
     左边必须是变量,右边是表达式。左值:表示存储在计算机内存中的对象,而不是常量或者计算结果,变量是左值。
     复合赋值:i += 3; //i = i+3;
    

    6)条件运算符:?:

     条件?表达式1:表达式2;
    

    7)逗号运算符: ,

          逗号运算符组成的式子也是表达式,其值等于最右边表达式的值
    

    8)指针运算符:* 、&

          &取地址,* 根据地址取变量。
    

    9)求字节数运算符:sizeof

    作用是返回一个对象或者类型所占的内存字节数。
    使用:sizeof(类型,变量名或者表达式);
    sizeof只关心类型,只会分析括号中的类型,不会对括号中的内容进行运算。
    如:int i = 5; sizeof(i=10); 输出i还是5。

    10)强制类型转换运算符:(类型)

        得到所需的中间变量,原变量的类型不变
    

    11)分量运算符: . ->

    12)下标运算符: []

    13)其他: 函数运算符

    根据所带操作数个数可以分为:
    一元(单目)运算符、
    二元(双目)运算符、
    三元(三目)运算符、
    多目运算符

    运算符优先级大概规律:
    算术>比较>逻辑>赋值>逗号
    括号可以改变运算顺序。

  • 相关阅读:
    DRP-ThreadLocal简单的理解
    Android开源项目SlidingMenu本学习笔记(两)
    [RxJS] Displaying Initial Data with StartWith
    [RxJS] Updating Data with Scan
    [RxJS] Stopping a Stream with TakeUntil
    [RxJS] Reactive Programming
    [RxJS] Reactive Programming
    [RxJS] Reactive Programming
    [RxJS] Starting a Stream with SwitchMap & switchMapTo
    [RxJS] Reactive Programming
  • 原文地址:https://www.cnblogs.com/HappyTeemo/p/7746902.html
Copyright © 2011-2022 走看看