各种运算符的介绍,超详解

         如果文中有出现错误的地方或者有疑问的地方,请私信博主,博主第一时间回复!

目录

1.算术运算符

基本算术运算符(+ - * / %)

 自增(++)、自减(--)运算符

2.关系运算符(> < == >= <= !=)

3.逻辑运算符 ( !&&  ||  )         

4.位运算符(<< >> ~ | ^ &)

  &按位或  ||按位与  ^按位异或

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

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

5.赋值运算符(=)

6.条件运算符(?:)

7.逗号表达式(,)

8.指针运算符(*和&)

9.求字节数运算符(sizeof)

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

11.成员运算符(-> .)

12.下标运算符([ ])

13.其他(函数调用操作符)


C语言提供了以下运算符:
(1)算术运算符    (+  -  *  /  %  ++  -- )   
(2)关系运算符   (>  <  ==  >=  <=  ! =)   

(3)逻辑运算符  ( !&&  ||  )                       

(4)位运算符        (<< >> ~ | ^ &)               

(5)赋值运算符     (=及其扩展赋值运算符)

(6)条件运算符    (?:)                        

(7)逗号运算符     ( , )                               

(8)指针运算符    ( * 和 & )                         
(9)求字节数运算符  ( size of )             
(10)强制类型转换运算符   (  (类型))   
(11)成员运算符    ( .  ->)                    
(12)下标运算符        ( [ ] )                      
(13)其他           (函数调用运算符等)      

        接下来,会和大家一一介绍。

1.算术运算符

基本算术运算符(+ - * / %)

先讲讲最基本的算术操作符

运算符含义举例结果
+正号(单目运算符)+aa的值
-负号(单目运算符)-aa的算术负值
*乘法运算符号a*ba和b的乘积
/除法运算符a/ba除以b的商
%求余运算符a%ba除以b的余数
+加法运算符a+ba和b的和
-减法运算符a-ba和b的差

#在C语言中,数学中的 乘号‘x’我们用 ‘*’代替。(ctrl +8)

#在C语言中,数学中的 除号‘➗’我们用 ‘/ ‘代替。             

int main ()
{    
    int a = 7;
    int b = 3;
    int c = a%b;
    return 0;

}

%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。                         

int main()
{
    int a = 7;
    int b = 3;
    int c = a/b;
    return 0;
}

                     

结果:c = 2        两个整数相除的结果为整数,当两个实数相除时结果为双精度实数。

int main()
{
    double a = 7;
    double b = 3.0;
    double c = a/b;
    return 0;
}

 自增(++)、自减(--)运算符

前置++

int main()
{
    int a = 1;
    int b = ++a;
    return 0;
}

当使用前置++时,为先++,后使用。先给a+1,然后在赋值给b。

结果:a=2,b=2

后置++

int main()
{
    int a = 1;
    int b = a++;
    return 0;
}

当使用后置++时,先使用,后加加。a的值会先赋值给b,然后a再加1。

结果:a=2,b=1

前置--

int main()
{
    int a = 1;
    int b = --a;
    return 0;
}

当使用前置--时,为先--,后使用。先给a-1,然后在赋值给b。

结果:a=0,b=0

后置--

int main()
{
    int a = 1;
    int b = a--;
    return 0;
}

当使用后置--时,先使用,后加加。a的值会先赋值给b,然后a再减1。

结果:a=0,b=1

2.关系运算符(> < == >= <= !=)

> 大于号

< 小于号

== 用来判断两个值大小是否相同(=为赋值符,给一个数赋值)

>= 大于等于

<= 小于等于

!= ’!‘为反逻辑,意思为不等于。

关系运算符一般用来比较大小。

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 0; 
    if(a>b)
        printf("%d\n",a);
    return 0;
}

结果:1

#include <stdio.h>
int main()
{
    int a = 3;
    if(a!=0)
        printf("haha\n");
    return 0;
}

结果:haha

3.逻辑运算符 ( !&&  ||  )         

运算符含义举例说明
&&逻辑与(and)a&&b如果a和b都为真,则结果为真,否则为假
||

逻辑或(or)

a || b如果a和b有一个以上为真,则结果为真,二者都为假时,结果为假
逻辑非(not)!a如果a为假,则!a为真,如果a为真,则!a为假

        #在C语言中,0表示为假,非零表示为真。

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    if(a&&b)
        printf("haha");
    return 0;
}

以上图为例

&&        只有左右两边的为真,结果才为真。一旦有一边为假,那么结果就为假。

a=1,b=2,a&&b 结果为真。

a=1,b=0,   a&&b 结果为假。

a=0,b=2,   a&&b 结果为假。

a=0,b=0,   a&&b 结果为假。

||        只有两边同时为假,结果才为假。一旦有一边为真,那么结果就为真。

a=1,b=2,a || b 结果为真。

a=1,b=0,a || b 结果为真。

a=0,b=2,a || b 结果为真。

a=0,b=0,a || b 结果为假。

!        逻辑非,输出的结果将会与实际结果相反。

#include <stdio.h>
int main()
{
    int a = 0;
    if(!a)
        printf("haha\n");
    return 0;
}

结果:haha

因为a的结果是0,那么a的相反就是非0,因此If语句判断为真。

当a=3时,a的相反就为0。那么if语句判断为假。就没有办法打印。

4.位运算符(<< >> ~ | ^ &)

  &按位或  ||按位与  ^按位异或

都是按照二进制来进行操作的。

 & : 按位与 只要有0,那么就为0。

 a&b,将a和b的二进制数字相应的位数进行比较,只要有0,那么就为0。

int a = 3;
int b = 5;
int c = a&b;
二进制数:
// 0 0 1 1  a
// 0 1 0 1  b
// 0 0 0 1  c

||   :按位或 只要有1,那么就为1。

a||b,将a和b的二进制数字相应的位数进行比较,只要有1,那么就为1。

int a = 3;
int b = 5;
int c = a||b;
二进制数:
// 0 0 1 1  a
// 0 1 0 1  b
// 0 1 1 1  c

 ^  :按位异或 相同为0,相异为1.

a^b,将a和b的二进制数字相应的位数进行比较,相同为0,相异为1。

int a = 3;
int b = 5;
int c = a^b;
二进制数:
// 0 0 1 1  a
// 0 1 0 1  b
// 0 1 1 0  c

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

~ :按位取反,1变成0,0变成1.

int b = 5;
二进制数字:
// 0 1 0 1
~b=10
// 1 0 1 0

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

<< : 将变量的二进制数字往左移动一位,左边的一位超过范畴舍去,右边缺少一位补0。

int a = 3;
二进制数字:
// 0 0 1 1
<<3 = 6
// 0 1 1 0

 0 0 1 1 -> (0) 0 1 1 0

<< : 将变量的二进制数字往右移动一位,右边的一位超过范畴舍去,左边缺少一位补0。

int a = 3;
二进制数字:
// 0 0 1 1
>>3 = 1
// 0 0 0 1

 0 0 1 1 ->  0 0 0 1 (1)

5.赋值运算符(=)

当你不喜欢某个值的时候就可以用等于号,来将这个值给变换。

#include<stdio.h>

int main()
{
	int weight = 200; //体重不喜欢,给自己赋一个喜欢的值
	weight = 100;
	int salary = 10000;//工资不喜欢,给自己赋一个喜欢的值
	salary = 20000;
	int hight = 160;/*身高不喜欢,给自己赋一个喜欢的值*/
	hight = 180;
	printf("weight=%d,salary=%d,hight=%d\n",weight,salary,hight);

	return 0;
}

结果:weight=100,salary=20000,hight=180

6.条件运算符(?:)

条件运算符又可以叫做三目运算符。因为它需要三个操作数。

表达式?表达式二:表达式三

表达式1表判断,如果表达式1为真的话。就会执行表达式2,如果表达式1为假的话,就会执行表达式3。

#include <stdio.h>
int main()
{
	int a = 4;
	int b = 5;
	a > b ? printf("%d\n", a) : printf("%d\n", b);
	return 0;
}

这里就是比大小,当a>b的时候就会执行表达式2,打印出a的值。如果a<b的话,那就会执行表达式3,打印b的值。

条件运算符适用于那些表达式比较简单的,如果表达式比较复杂的话,就要考虑使用if语句。

7.逗号表达式(,)

逗号表达式就是用逗号隔开的多个表达式。

从左到右依次计算。最后算出的结果是最后一个表达式的结果。

int main()
{
 	int a = 4;
	int b = 5;
	int c = 6;
	b =( ++a, 6, ++c);
	return 0;
}

结果:a=5,b=7,c=7.

8.指针运算符(*和&)

* 又可以叫间接访问操作符(解引用操作符)

*常常与指针伴随使用。

int main()
{
    int a = 10;
    int* p = &a;
    *p = 20;
    printf("%d\n",a);
    return 0;
}

 p被赋予a的地址,即p为指针,*p可以通过地址来使用a或者直接改变a的值。

&取地址操作符,可以取一个变量的地址。

int main()
{
    int a = 10;
    printf("%d\n",&a);
    return 0;
}

结果:0x010ffcc0 

就是a的地址。

9.求字节数运算符(sizeof)

sizeof是用来计算变量所占内存的大小,或者是类型所创造的变量占据空间的大小。

int main()
{
	char arr[10] = { 0 };
	int tmp[10] = { 0 };
	printf("%d\n", sizeof arr);
	printf("%d\n", sizeof tmp);

	return 0;
}

int 整形的一个变量的大小为4个字节,而char 字符类型所产生的一个变量的所占内存大小为1个字节,因此

结果:10

           40

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

        可以利用强制类型转换运算符将一个表达符将一个表达式转换成所需类型。

int main()
{
	int a = 3.14;
	printf("%d\n", a);
	return 0;
}

这样的程序最后会报出警告,但是在msvc中依旧能打印结果'3'。

11.成员运算符(-> .)

     

ps->age=20;//为定义结构体成员。
ps.age//为使用结构体成员

  ->和. 是成员运算符,两者的不同点在于一个用来使用,一个用来定义,

ps->age=20;

=(*ps).age=20;

12.下标运算符([ ])

int arr[10] = {0,1,2,3,4,5,6,7,8,9};
//arr[7] = {7};

  其中的[]就是下标引用操作符,而arr和7就是操作数,我们在调用数组时,可以:

printf("%d\n",7[arr] );

  这样的写法也是对的,但是不符合我们的习惯。

  但是在定义的时候我们不能使用:

int 10[arr]={0};

  这样的写法是错的。        

13.其他(函数调用操作符)

int c = Add(a,b);

  这里的()就是函数引用操作符,而Add,a,b就是操作数。

  • 20
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
C++ 中的面向对象编程允许我们使用类和对象来组织和管理代码。在类中,可以定义成员函数和成员变量。成员函数是与类相关联的函数,它们可以访问类的成员变量并执行与该类相关的操作。成员变量是存储在类中的变量,它们描述了类的状态。 运算符重载是 C++ 中面向对象编程的一种强大功能。它允许您重新定义运算符以执行特定操作。例如,您可以重载“+”运算符以执行类对象的加法操作。运算符重载使您能够编写更直观和易于使用的代码。 友元函数是类的非成员函数,但它们可以访问类的私有成员。当您需要访问类的私有成员但不想使这些成员成为公共接口的一部分时,友元函数就会很有用。要声明一个友元函数,请在类定义中将其声明为友元。友元函数可以是全局函数或其他类的成员函数。 下面是一个示例类,其中包含运算符重载和友元函数: ```cpp #include <iostream> class MyClass { public: MyClass(int value) : value_(value) {} // 重载加号运算符,将两个 MyClass 对象相加 MyClass operator+(const MyClass& other) { return MyClass(value_ + other.value_); } // 将友元函数声明为 MyClass 的友元 friend void PrintValue(const MyClass& obj); private: int value_; }; // MyClass 的友元函数 void PrintValue(const MyClass& obj) { std::cout << "The value of MyClass is: " << obj.value_ << std::endl; } int main() { MyClass obj1(10); MyClass obj2(20); MyClass result = obj1 + obj2; PrintValue(result); return 0; } ``` 在这个例子中,我们定义了一个 MyClass 类,它包含一个成员变量 value_ 和一个构造函数。我们还重载了加号运算符,以便我们可以将 MyClass 对象相加。最后,我们定义了一个名为 PrintValue 的友元函数,该函数可以访问 MyClass 类的私有成员 value_。 在 main 函数中,我们创建了两个 MyClass 对象,将它们相加并将结果打印到控制台上。请注意,我们使用了友元函数 PrintValue 来打印 MyClass 对象的值,而不是直接访问 MyClass 对象的私有成员。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪巴戒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值