C++存储类与运算符

目录

一 存储类

二 运算符

算术运算符:

关系运算符:

逻辑运算符:

位运算符:

赋值运算符:

杂项运算符:

C++ 中的运算符优先级


一 存储类

存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类:

Auto :auto 存储类是所有局部变量默认的存储类;

Register :register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量;

Static :static 存储类指示编译器在程序的生命周期内保持局部变量的存在;

Extern :extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的;

Mutable : mutable 说明符仅适用于类的对象,它允许对象的成员替代常量。

代码演示:

#include <iostream>

int main() {

    //局部变量存储auto的使用
    auto sum=100;

    //寄存器存储,在c++17已取消支持,代表该变量可能会存储在寄存器中,
    //register int count=99;

    //静态变量存储,代表该变量会一直存在,直至程序结束才会消亡。
    static int pi=100;

    //外部变量申明,代表该变量是一个全局变量,这里仅作为演示,实际使用时不能定义在函数内部
    //extern int et;

    //mutable主要使用在类中,用于对象成员替代常量。

    for (int i = 0; i < sum; ++i) {
        sum+=sum;
        pi--;



        std::cout<<"sum: "<<sum<< std::endl;
        std::cout<<"pi: "<<pi<< std::endl;


    }

    return 0;

}

二 运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了以下类型的运算符:

算术运算符

运算符

描述

实例

+

把两个操作数相加

A + B 将得到 30

-

从第一个操作数中减去第二个操作数

A - B 将得到 -10

*

把两个操作数相乘

A * B 将得到 200

/

分子除以分母

B / A 将得到 2

%

取模运算符,整除后的余数

B % A 将得到 0

++

自增运算符,整数值增加 1

A++ 将得到 11

--

自减运算符,整数值减少 1

A-- 将得到 9

关系运算符

运算符

描述

实例

==

检查两个操作数的值是否相等,如果相等则条件为真。

(A == B) 不为真。

!=

检查两个操作数的值是否相等,如果不相等则条件为真。

(A != B) 为真。

>

检查左操作数的值是否大于右操作数的值,如果是则条件为真。

(A > B) 不为真。

<

检查左操作数的值是否小于右操作数的值,如果是则条件为真。

(A < B) 为真。

>=

检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。

(A >= B) 不为真。

<=

检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。

(A <= B) 为真。

逻辑运算符

运算符

描述

实例

&&

称为逻辑与运算符。如果两个操作数都非零,则条件为真。

(A && B) 为假。

||

称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。

(A || B) 为真。

!

称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。

!(A && B) 为真。

位运算符

位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

p

q

p & q

p | q

p ^ q

0

0

0

0

0

0

1

0

1

1

1

1

1

1

0

1

0

0

1

1

下表显示了 C++ 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

运算符

描述

实例

&

如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。

(A & B) 将得到 12,即为 0000 1100

|

如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。

(A | B) 将得到 61,即为 0011 1101

^

如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。

(A ^ B) 将得到 49,即为 0011 0001

~

二进制补码运算符是一元运算符,具有"翻转"位效果。

(~A ) 将得到 -61,即为 1100 0011,2 的补码形式,

带符号的二进制数。

<<

二进制左移运算符。左操作数的值向左移动右操作数指定的位数。

A << 2 将得到 240,即为 1111 0000

>>

二进制右移运算符。左操作数的值向右移动右操作数指定的位数。

A >> 2 将得到 15,即为 0000 1111

赋值运算符

运算符

描述

实例

=

简单的赋值运算符,把右边操作数的值赋给左边操作数

C = A + B 将把 A + B 的值赋给 C

+=

加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数

C += A 相当于 C = C + A

-=

减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数

C -= A 相当于 C = C - A

*=

乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数

C *= A 相当于 C = C * A

/=

除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数

C /= A 相当于 C = C / A

%=

求模且赋值运算符,求两个操作数的模赋值给左边操作数

C %= A 相当于 C = C % A

<<=

左移且赋值运算符

C <<= 2 等同于 C = C << 2

>>=

右移且赋值运算符

C >>= 2 等同于 C = C >> 2

&=

按位与且赋值运算符

C &= 2 等同于 C = C & 2

^=

按位异或且赋值运算符

C ^= 2 等同于 C = C ^ 2

|=

按位或且赋值运算符

C |= 2 等同于 C = C | 2

杂项运算符

运算符

描述

sizeof

sizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。

Condition ? X : Y

条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。

,

逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。

.(点)和 ->(箭头)

成员运算符用于引用类、结构和共用体的成员。

Cast

强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。

&

指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。

*

指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。

C++ 中的运算符优先级

类别 

运算符 

结合性 

后缀 

() [] -> . ++ - -  

从左到右 

一元 

+ - ! ~ ++ - - (type)* & sizeof 

从右到左 

乘除 

* / % 

从左到右 

加减 

+ - 

从左到右 

移位 

<< >> 

从左到右 

关系 

< <= > >= 

从左到右 

相等 

== != 

从左到右 

位与 AND 

从左到右 

位异或 XOR 

从左到右 

位或 OR 

从左到右 

逻辑与 AND 

&& 

从左到右 

逻辑或 OR 

|| 

从左到右 

条件 

?: 

从右到左 

赋值 

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

从右到左 

逗号 

从左到右 

代码演示:

#include <iostream>

int main() {

    //局部变量存储auto的使用
    auto sum=100;

    //寄存器存储,在c++17已取消支持,代表该变量可能会存储在寄存器中,
    //register int count=99;

    //静态变量存储,代表该变量会一直存在,直至程序结束才会消亡。
    static int pi=100;

    //外部变量申明,代表该变量是一个全局变量,这里仅作为演示,实际使用时不能定义在函数内部
    //extern int et;

    //mutable主要使用在类中,用于对象成员替代常量。

    for (int i = 0; i < sum; ++i) {
        sum+=sum;
        pi--;



        std::cout<<"sum: "<<sum<< std::endl;
        std::cout<<"pi: "<<pi<< std::endl;


    }


    //基本运算符演示
    int a=12,b=13,c=33,d=55,e=90,Sum=0; //申明5个变量
     Sum=(int) ((a+b-c)*d/e);   //由于用到了除法,把结果强制转换为int型
     std::cout<<"Sum: "<<Sum<<std::endl;

     //逻辑运算符演示
     bool max=Sum >e;
     int min=c<a? c:a;
     std::cout<<"Sum是否大于e: "<<max<<std::endl;
     std::cout<<"c和a相比叫小的数是:"<<min<<std::endl;

     //逻辑运算符演示
     int middle= a<b && b<c ? c:a;  //寻找中间数
     std::cout<<"a,b,c的中间数是:"<<middle<<std::endl;

     //位运算符
     int other=a ^b;
     std::cout<<"a^b的值是:"<<other<<std::endl;

     



    return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值