目录
前言:
我们在前面几篇文章中对井字棋和扫雷两个阶段性练习进行了详细的练习讲解,想必各位小伙伴们对于前面学到的知识也能较为充分的掌握了。从本文开始,我们将继续进行下一部分关于操作符的学习。
一、操作符分类:
简单来说,操作符可以分为以下十类:
算术操作符 | 移位操作符 | 位操作符 |
赋值操作符 | 单目操作符 | 关系操作符 |
逻辑操作符 | 条件操作符 | 逗号表达式 |
下标引用、函数调用和结构成员 |
而在接下来的文章中我也将按照这样的分类和顺序,为各位小伙伴们介绍一些有关操作符的知识。
二、操作符详解:
1.算术操作符+、-、*、/、%:
算术操作符很简单也很常见,是普遍用于我们代码中的各种量的计算的基本运算,其用法也很简单,与我们平日里的算术逻辑相同:
int main()
{
int a = 10;
int b = 4;
int c = 0;
c = a + b;
printf("a + b = %d\n", c);
c = a - b;
printf("a - b = %d\n", c);
c = a * b;
printf("a × b = %d\n", c);
c = a / b;
printf("a ÷ b = %d\n", c);
c = a % b;
printf("a对b求余 = %d\n", c);
return 0;
}
运行结果简单明了:
这些操作符的使用很简单,但我们在使用时仍需注意一些细节问题。除' % '操作符外,其他几个操作符均可以作用于整数与浮点数,而使用' % '操作符进行计算的两个操作数必须为整数,返回的是整除之后的余数。对于' / '操作符,如果两个操作数均为整数,则执行整数除法,而两个操作数中任意一个(或两个)为浮点数,则执行浮点数除法:
int main()
{
int a = 10;
int b = 3;
double c = 3.0;
printf("a ÷ b = %d\n", a / b);
printf("a ÷ c = %lf\n", a / c);
//用lf进行打印的double与float类型浮点数默认打印至小数点后六位
//在lf前加上"."+打印位数,可以改变为我们希望打印的位数
printf("a ÷ c = %.1lf\n", a / c);
return 0;
}
运行结果验证:
2.移位操作符>>、<<:
在这里为各位小伙伴们进行说明,移位操作符中的“位”,指的是二进制位,且移位操作符的操作数只能是整数。
在最开始的学习中,我们提到过,数据在计算机中的存储,存储的是其对应的二进制补码,而移位操作符所操作的,正是各数据的二进制补码。
1.原码、反码与补码:
在我们开始细致了解移位操作符之前,我们首先要了解什么是原码,什么是反码,什么又是补码。
我们都知道,对于一个数,计算机要使用一定的编码方式进行存储,在计算机中通过使用电势的高低来对数据进行存储,高电平为1,低电平为0,则每一位上均存在两种情况,则在32位的计算机中就总共存在着2^32种不同的组合,于是我们在计算机中便可以根据电势的高低来存储数据的二进制码。即原码、反码、补码是机器存储一个具体数字的编码方式。
在数据存储时,整个二进制码的首位我们将其定为符号位,0表示正数,1表示负数:
+1在32位计算机中的表示为:0000 0000 0000 0000 0000 0000 0000 0001
- 1在32位计算机中的表示为:1000 0000 0000 0000 0000 0000 0000 0001
这样直接由数据本身转换成的二进制序列即为数据对应的原码。
那么什么是反码呢?正数的反码就是其本身,而负数的反码则是将数据除符号位以外所有位均按位取反后得到的二进制序列:
+1在32位计算机中的反码为:0000 0000 0000 0000 0000 0000 0000 0001
- 1在32位计算机中的反码为: 1111 1111 1111 1111 1111 1111 1111 1110
最后就是数据的补码了,正数的补码仍是其本身,而负数的补码则是在其反码的基础上+1:
+1在32位计算机中的补码为:0000 0000 0000 0000 0000 0000 0000 0001