对于刚接触C语言的人来说,一提到操作符,可能也只有==、+、-、*等等。今天就来了解一下操作符的知识。
操作符包括算术操作符、移位操作符、位操作符、赋值、单目操作符。关系操作符、逻辑操作符、条件操作符。逗号操作符。
算术操作符有:加(+)、减(-)、乘(*)、除(/)、取模(%)。
在这些操作符中,需要注意的是除(/)和取模(%)的使用:
1、 浮点数相除是浮点数,整数相除是整数,浮点数除以整数为浮点数。
2、 取模(%)两边都应为整数。
移位操作符有:左移(<<)和右移(>>)。
在说这些之前,我们应该了解什么是源码、反码和补码。
电脑一般都是32位的,则在编程软件中,数字的二进制也是32位。正数在电脑中以源码保存,负数在电脑中以补码保存。正数的源码最高位是0,负数的源码最高位是1。正数的源码、反码、补码都相同。负数的反码是在符号位不变的基础上,其他位取反。其补码为反码+1。
例如:1源码为0000 0000 0000 0000 0000 0000 0000 0001
1反码为0000 00000000 0000 0000 0000 0000 0001
1补码为0000 00000000 0000 0000 0000 0000 0001
-1源码为1000 00000000 0000 0000 0000 0000 0001
-1反码为1111 11111111 1111 1111 1111 1111 1110
-1补码是1111 11111111 1111 1111 1111 1111 1111
接下来再说左移(<<),末位补0,最高位溢出。
例如:a=1,a<<2
a:00000000 0000 0000 0000 0000 0000 000100
溢出 补0
则a<<2:0000 0000 0000 0000 0000 0000 0000 0100
int main()
{
int a = 1;
printf("a=%d\n",a);
a = a << 2;
printf("a<<2=%d\n",a);
system("pause");
return 0;
}
右移(>>)分为逻辑右移和算术右移。逻辑右移是左边补0,右边舍弃。算术右移是最高位补符号位,右边舍弃。经常使用的是算术右移。
例如:a=1,a>>2
a: 000000 0000 0000 0000 0000 0000 0000 0001
补符号位 舍弃
a<<2: 0000 0000 0000 0000 0000 0000 0000 0000
int main()
{
int a = 1;
printf("a=%d\n",a);
a = a >> 2;
printf("a>>2=%d\n",a);
system("pause");
return 0;
}
位操作符有三种,分别是:与(&)、或(|),异或(^)的原则进行计算。
与(&)就是两个数的补码,每位进行比较,按照有0则为0,同为1则是1的原则进行计算。
异或(^)就是两个数的补码,每位进行比较,按照相同为0,不同为1的原则进行计算。
先看下面这段例程
int main()
{
int a = 3;
int b = 5;
printf("a&b=%d\n",a&b);
printf("a|b=%d\n",a|b);
printf("a^b=%d\n",a^b);
system("pause");
return 0;
}
a的补码是:0000 0000 0000 00000000 0000 0000 0011
b的补码是:0000 0000 0000 0000 0000 0000 0000 0101
则 a&b=0000 0000 0000 0000 0000 0000 00000001=1
a|b=0000 0000 0000 0000 0000 0000 0000 0111=7
a^b=0000 0000 0000 0000 0000 0000 0000 0110=6
赋值中包括就是我们常见的=,还包括复合赋值操作符有+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。
a+=2表示a=a+2,即操作符两边的数先进行计算再将计算结果赋值到操作数。
关系操作符有!=、<=、>=、==、<、>
单目操作符有!、-、+、&、sizeof、~、++、--、*。
!表示非,例如!(2=2),2=2为真,则!(2=2)为假。
-表示操作数的负值,-1也就是我们所说的负数。
+表示操作数的正值,一般被省略。
&表示操作数的地址,例如:
int a = 10;
int* b = &a;
sizeof用于计算该操作数或表达式的字节数,初学者会认为这是一个函数,这是一个误区。
~用于整型求补操作,即将该操作数的二进制进行转换,1变为0,0变为1。
++用于操作数的自加,每次加1,++a表示先自加在使用该操作数,a++表示先使用该操作数再进行自加。
*表示间接访问操作符,在指针中使用。*a表示访问a指向的内容。
逻辑操作符有&&和||,在这里需要注意的是要和位操作符进行区分,&&表示和,即所有条件为真且为真,一个条件为假就是假,||表示或,即一个为真即为真,全部为假才是假。
条件操作符包括三个部分:a?b : c
a为一个判断条件,若a为真则执行b语句,若a为假则执行c语句。
逗号操作符使用很频繁,逗号操作符把多个表达式分隔开,表达式从左往右依次计算。
可能关于操作符的叙述不是很详细,欢迎交流!