C语言中操作符有很多,如“%,/,>>,<<,^,&,|,~,&&,||”等,在阅读完本篇文章之后,相信你会对他们有较为清晰的认识。
%表示取模运算,计算结果是一个除式的余数。
需要注意的是,取模运算两边都必须是整数,否则会报错。
#include
using namespace std;
int main()
{
int a=5;
int b=2;
printf("%d",a%b);
return 0;
}
结果为:
1
计算的结果为一个除式的商,即整数部分。
#include
using namespace std;
int main()
{
int a=5;
int b=2;
printf("%d",a/b);
return 0;
}
结果为:
2
>>为右移操作符,移动的是二进制位。
移位方式分两种:(一般为算术右移)
1.算术右移:移动n位,即除以2的n次方,右边丢弃,左边补原符号位,正0负1
2.逻辑右移:右边丢弃,左边补零。不用考虑符号位。
#include
using namespace std;
int main()
{
int a=16;
int b=a>>1;
printf("%d",b);
return 0;
}
结果为:
8
算术右移,移动的是二进制位,因为计算机存储数据是32个比特位,所以16的二进制位00000000000000000000000000010000,向右移动一位,左边补原符号位,就是补一个0,然后换算成十进制就是8,也就是除了一个2。
如果移位较多,比如移动了六位七位八位,那么结果就是0。
#include
using namespace std;
int main()
{
int a=16;
int b=a<<1;
printf("%d",b);
return 0;
}
结果为:
32
左移的移位方式就是:左边丢弃,右边补零。也就相当于乘了一个2。
& 按位与:两个全为1才为1
| 按位或:两个全为0才为0
^ 按位异或:相同为0,相异为1(关于按位异或,我在小结处附上了一串代码,相信你会很感兴趣并感到非常amazing)
#include
using namespace std;
int main()
{
int a=5;
int b=3;
int c=a&b;
printf("%d",c);
return 0;
}
结果为:
1
解析:
按位与
5的二进制为:101
3的二进制为:011
做与计算得: 001
所以得到结果为:1
#include
using namespace std;
int main()
{
int a=5;
int b=3;
int c=a|b;
printf("%d",c);
return 0;
}
结果为:
7
大家根据按位与的解法,理解之后很容易得出的答案。
#include
using namespace std;
int main()
{
int a=5;
int b=3;
int c=a^b;
printf("%d",c);
return 0;
}
结果为:
6
大家根于按位与的解法,理解之后很容易得出的答案。
按位取反按的是二进制位,0变1,1变0,最后输出十进制数字。先看代码:
#include
using namespace std;
int main()
{
int a=0;
printf("%d",~a);
return 0;
}
结果为:
-1
这里你可能比较懵逼,不过莫慌,理解之后你会发现并不难。
代码中先定义整形变量a=0,然后输入a的按位取反之后的结果。我们知道a本来是32个0,计算机存储数据用补码形式存储,a的补码依然是32个0。按位取反后得到32个1,这时得到的是所求数字的补码形式,但是输出应该是原码而得到的是补码,所以补码减一再取反就得到原码,取反的时候符号位不变,其他取反,输出结果为-1。
&&只要有一个为假就为假。
#include
using namespace std;
int main()
{
int a=0;
int b=1;
if(a&&b){
printf("两者都为真");
}
else{
printf("至少有一个为假");
}
return 0;
}
结果为:
至少有一个为假
因为a=0为假,所以无法进入if语句,输出结果就是“至少有一个为假”。如果两者都为真,那么输出“两者都为真”。
||只要有一个为真就为真。
#include
using namespace std;
int main()
{
int a=0;
int b=1;
if(a||b){
printf("至少有一个为真");
}
else{
printf("两者都为假");
}
return 0;
}
结果为:
至少有一个为真
以上就是我所总结的常见的操作符的常见用法,当然你看了这些之后也只是对这些操作符有一个大致的了解,可能你并不清楚它有什么作用,这需要你不断地做题慢慢认识,不过我要告诉你的是,它们非常有用。
比如按位操作符^,合理使用它可以实现不创建变量交换两个变量的值,代码附上,感兴趣的话可以去了解一下,这里不再赘述。
#include
using namespace std;
int main()
{
int a=5;
int b=3;
a=a^b;
b=a^b;
a=a^b;
printf("%d %d",a,b);
return 0;
}
结果为:
3 5