在C/C++中有许多拥有各种功能的操作符,用来实现我们需求,比如最常用的 = 就是操作符之一,又比如数学运算中常见的+、-、* 和 / ,本文旨在通过各种详细的例子来介绍这些操作符,让你与它们之间不再陌生
分类 算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构体成员。注意:
本文只介绍到单目操作符中的自加和自减,如果想看其他内容还得等一等下篇文章的发布。
文中图片上的代码所引用的头文件#include
正文 算术操作符 算术操作符中的 +
加号,应该都知道它的功能吧,两数相加,经典1+1=2
算术操作符中的 -同 + 号一样,都是最基础的运算符号,没必要过多阐述
算术操作符中的 *这个在键盘上与数字8共存的小符号就是数学运算中的X号,不过在C/C++中要表示为 1*1=1
算术操作符中的 /同*一样,除号表示为/,位于小数字键盘的顶部
算术操作符中的 %
这个符号位于*的旁边,是求余数的意思,也可称为求模,此操作符两边必须为整数!!!
算术操作符到这算是介绍完了,下面是关于算术操作符的一些注意事项:
1.除了 % 操作符,其他几个操作符都可以用作整型数及浮点型数
2.对于 / 操作符,如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就要执行浮点 型除法
3. % 操作符的两个操作数必须是整数,返回的是整除之后的余数
移位操作符 左移操作符 <<所谓移位操作符就是移动位置的操作符,如1<<1,表示1向左移动一位,可别以为移动后是0.1,正确答案是2,因为移位操作符移动的是这个数字的二进制位
右移操作符 <<右移操作符与左移操作符逻辑一致,不同的是右移操作符有两种,一种称为算术右移:右边丢弃,左边补原符号位,另一种称为逻辑右移:右边丢弃,左边补0。无论是算术还是逻辑,对于正数来说都一样,不过对于负数可就不同了,算术右移可以让负数保持原负数的状态,而逻辑右移则会让负数变成正数,因为左边补0了。
我先来介绍下负数在电脑中的存储情况
这里只列举了-1的情况,其他情况读者可以去尝试
位操作符 按位与 &我们都知道,&&表示并且的意思,而一个&则表示按二进制与,即:遇0为0,唯1为1
按位或 |和按位与一个道理,不过按位或的规则是:遇1为1,唯0为0
按位异或 ^
这个符号在&的旁边,表示按二进制位异或,规则是:相同为0,不同为1
位移操作符已经介绍完了,跟移位操作符一样离不开对二进制的理解,学会位操作符,可以完成不依靠第三个变量将两数互换的操作,同时可以对数字在电脑中的存储有更深的理解
建议:
1.在使用移位操作符时,所移动的位置不要超过二进制的位数
2.在使用位操作符时,a^a=0,0^a=0,因此可知a^b^b=a,可以了解一下这个特性
赋值操作符 直接赋值符目前我就知道 = 号,他的作用不言而喻,就是将一个常量赋给一个变量
间接赋值 += 加等即通过简写来实现较长的代码功能,如a=a+100等价于a+=100
- = 减等 * = 乘等 / = 除等 % = 模等 >> = 右移位等 << = 左移位等 &= 按位与等 | = 按位与等 ^ = 按位异或等间接操作符到此就展示完毕了,间接操作符本质上就是在减少代码量,其代码的具体功能在前面都已经详细介绍过了,忘记的同学可以往前翻翻
单目操作符单目操作符就是只有一个操作数的操作符
逻辑反操作 !我愿称之为逆转乾坤符,假的前面加上 ! 就能变成真的
负值 -顾名思义,就是把一个正数变成负数,负数变成正数
正值 +主要作用就是把负数变成正数,一般在正数中省略
求操作数的类型长度(以字节为单位) sizeofsizeof 是一个操作符,不是函数,要与求字符长度函数 strlen 区分开来
对一个二进制位按位取反 ~按位取反,有点反码的意思,也是在二进制中进行
前置++、前置--前置++或--就是在原数的基础上+1或-1,前置要注意的是先使用再++或--
后置++、后置--
同前置使用方法一样,不过后置是先++或--再使用,这两兄弟多用于 for 循环中
操作符介绍先告一段落~
代码合集文中所提到的代码这里都有
#include
//算术操作符 +
int main()
{
int a = 1;
int b = 1;
int c = 0;
c = a + b;
printf("%dn", c);
return 0;
}
#include
//算术操作符 -
int main()
{
int a = 2;
int b = 1;
int c = 0;
c = a - b;
printf("%dn", c);
return 0;
}
#include
//算术操作符 *
int main()
{
int a = 2;
int b = 2;
int c = 0;
c = a * b;
printf("%dn", c);
return 0;
}
#include
//算术操作符 /
int main()
{
int a = 4;
int b = 2;
int c = 0;
c = a / b;
printf("%dn", c);
return 0;
}
#include
//算术操作符 / 操作数为小数
int main()
{
int a = 4.5;
int b = 4.0;
int c = 0;
c = a / b;
printf("%dn", c);
return 0;
}//int型,所以只能打印 1
#include
//算术操作符 / 操作数为小数且为浮点型
int main()
{
float a = 4.5;
float b = 4.0;
float c = 0;
c = a / b;
printf("%fn", c);
return 0;
}//正常输出小数,默认输出小数后六位
#include
//算术操作符 %
//特别注意,这个操作符两端必须为整数
int main()
{
int a = 2;
int b = 4;
int c = 0;
c = a % b;
printf("%dn", c);
return 0;
}//2除以4,不够除,余2
#include
//移位操作符 左移操作符 <<
int main()
{
int a = 1;
a=a << 1;
printf("%dn", a);
return 0;
}
#include
//移位操作符 右移操作符 >>
//右移有两种情况
//1.算术右移:右边丢弃,左边补原符号至原符号位
//2.逻辑右移:右边丢弃,左边补0
int main()
{
int a = 1;
int b = -1;
a = a >> 1;
b = b >> 1;
printf("a=%d b=%dn", a,b);
return 0;
}
#include
//位操作符 按位与 &:遇0为0,唯1为1
int main()
{
int a = 3;
int b = 5;
int c = 0;
c = a & b;
printf("%dn", c);
return 0;
}
#include
//位操作符 按位或 |:遇1为1,唯0为0
int main()
{
int a = 3;
int b = 5;
int c = 0;
c = a | b;
printf("%dn", c);
return 0;
}
#include
//位操作符 按位异或 ^:相同为0,相异为1
int main()
{
int a = 3;
int b = 5;
int c = 0;
c = a ^ b;
printf("%dn", c);
return 0;
}
#include
//赋值操作符 直接赋值 =
int main()
{
int a = 0;
a = 100;
printf("%dn", a);
return 0;
}
#include
//赋值操作符 间接赋值 +=
int main()
{
int a = 0;
int b = 0;
a = a + 10;
b += 10;
printf("a=%d b=%dn", a,b);
return 0;
}
#include
//赋值操作符 间接赋值 -=
int main()
{
int a = 10;
int b = 10;
a = a - 5;
b -= 5;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//赋值操作符 间接赋值 *=
int main()
{
int a = 10;
int b = 10;
a = a * 10;
b *= 10;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//赋值操作符 间接赋值 /=
int main()
{
int a = 100;
int b = 100;
a = a / 10;
b /= 10;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//赋值操作符 间接赋值 %=
int main()
{
int a = 101;
int b = 101;
a = a % 10;
b %= 10;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//赋值操作符 间接赋值 >>=
int main()
{
int a = 1;
int b = 1;
a = a >> 1;
b >>= 1;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//赋值操作符 间接赋值 <<=
int main()
{
int a = 1;
int b = 1;
a = a << 1;
b <<= 1;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//赋值操作符 间接赋值 &=
int main()
{
int a = 1;
int b = 1;
a = a & 2;
b &= 2;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//赋值操作符 间接赋值 |=
int main()
{
int a = 1;
int b = 1;
a = a | 2;
b |= 2;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//赋值操作符 间接赋值 ^=
int main()
{
int a = 1;
int b = 1;
a = a ^ 2;
b ^= 2;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//单目操作符 逻辑反操作 !
int main()
{
int a = 1;
int b = 0;
if (a)
printf("hellon");
if (!b)
printf("hin");
return 0;
}
#include
//单目操作符 负值 -
int main()
{
int a = 1;
int b = 0;
b = -a;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//单目操作符 正值 +
int main()
{
int a = -1;
int b = 0;
b = -a;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//单目操作符 求操作数的长度 sizeof
int main()
{
int a = 1;
char b = 1;
printf("a=%d b=%dn", sizeof a,sizeof b);
return 0;
}
#include
//单目操作符 二进制取反 ~
int main()
{
int a = 0;
int b = 0;
b = ~a;
printf("a=%d b=%dn", a, b);
return 0;
}
#include
//单目操作符 前置 ++ -- 先使用再++或--
int main()
{
int a = 1;
int b = 0;
int c = 0;
b = a++;
printf("a=%d b=%dn", a, b);
c = a--;
printf("a=%d c=%dn", a, c);
return 0;
}
#include
//单目操作符 后置 ++ -- 先++或--在使用
int main()
{
int a = 1;
int b = 0;
int c = 0;
b = ++a;
printf("a=%d b=%dn", a, b);
c = --a;
printf("a=%d c=%dn", a, c);
return 0;
}
本文是我写过最为繁琐的文章,关键还没介绍完,下次一定,但里面还包含了大多数操作符,以及详细介绍了用法,通过画图软件,让大家能够对电脑中的内存和存储在其中的数字的二进制形式更为了解,写了三个多小时,选择已经快八点了,我还是苟命要紧先去吃个饭。
希望我的文章能够为大家再写代码时提供帮助!
希望各位大牛能够及时指出我文中存在的不足和错误,我好加以改正!
最后希望以后写的文章越来越好!
鸣谢感谢比特科技鹏哥所传授的知识,让我受益匪浅,写出这篇文章!



