++作为常见的增量操作符,它用于增加变量的值,分为左++和右++,接下来介绍一下二者的区别:
#include <stdio.h>
int main()
{
int a = 1;
++a;
printf("%d", a);
return 0;
}
#include <stdio.h>
int main()
{
int a = 1;
a++;
printf("%d\n", a);
return 0;
}
我们可以发现最终输出的值是一样的,但是二者的区别在于左++返回的++之后的值,而右++返回的是++之前的值
接下来介绍的是短路求值,可以更好地帮助我们掌握++和与非运算逻辑
#include <stdio.h>
int main()
{
int a = 0;
int b = 1;
a++ && b++;
a++ || b++;
printf("a = %d b = %d\n", a, b);
return 0;
}
我们可以先思考一下a和b的值应该是多少
我们会发现b++没有执行,那么为什么会是这样呢:
首先 a++ && b++中 a++返回的是0,是假值,&&只有前后都为真时才返回真,所以当a++为假的时候,b++就不再执行了;而 a++ || b++ 中 a++返回的是1,是真值,||有一个为真的时候就返回真,所以当a++为真的时候,b++也不再执行了
接下来介绍一下位运算
位运算:在现代计算机中,所有数据都以二进制形式存储,即 0 和 1 两种状态。计算机对二进制数据进行的运算(如加、减、乘、除)被称为位运算,即对二进制数的每一位进行操作的运算。
位运算的运算符一共有六种:
与 & 都是 1 为 1
或 | 有 1 为 1
取反 ~ 1 变 0 0 变 1
异或 ^ 相同为 0 不同为 1
左移 << 左移补 0 移动几位补几个
右移 >> 右移补符号位 移动几位补几个
我们来举个例子:
#include <stdio.h>
int main()
{
int a = -1;
printf("%d\n", a >> 5);
return 0;
}
那么最终输出的结果是:
int 类型的 -1 的补码为32个 1 ,所以无论移多少位还是32个 1 ,所以最终的结果还是 -1
接下来介绍一种通过位运算来调换两个数的值的方法:
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d b = %d\n", a, b);
return 0;
}
可以看到a和b的值成功的调换了
以下是具体的实现过程: