(10)操作符(简单介绍)
算术操作符:+、-、*、/、% (%取模——指取余数)
移位操作符:>> 、<<
位操作符:&、^、|
赋值操作符:=、+=、-=、*=、/=、&=、^=、|=、>>=、<<=
举例:
int main(){
int a=5/2;
printf("%d\n",a);
return 0;
}
用“/”除法得出的打印结果为商的值。(余数不会显示)
如果将int a=5/2;改为int a=5%2;(取模的打印结果为其余数),这时打印结果为“1”
移位操作符:
>>——指向右移 <<——指向左移
移位操作符移的位其实是二进制位。(移二进制位操作符)
如:int a=1;中“1”的二进制序列是如何表达呢?(把用来存放32bit位的空间叫做“a”)
“1”原本二进制是01;但是“1”放在整形a里面去了,所以整形1占4个字节——32bit位;
所以int a=1;的二进制表示为:0000...(31个0)1
而a<<1的意思就是把a的二进制序列拿起来向左移动1位。(移动整体)
如:把00001向左移,则是把右边第一个0丢弃,这时末尾应在补一个0,得00010
【归纳:左边丢弃,右边补齐】
因此:
int main(){
int a=1;
int b=a<<1;————————用来接受a移动的值
printf("%d\n",b);
return 0;
}
其打印结果为“2”。
因为a<<1,整体向左移动1位,所得的二进制为“10”,转为十进制为“2”。
移动2位也是同样的意思。(a<<2,打印结果为“4”)。
再引出一个问题——不管“b”的值是多少,那“a”的值变了吗?
用printf("%d\n",a);打印结果为1,是不变的。
这说明,当我们对“a”进行左移操作的时候(a<<1),或者右移的时候,“a”本身是不变的。
除非移完之后,再次进行定义。
位操作符:这里的位指二进制位
在位操作符有“&”这个符号,叫做“按位与”
“|”——按位或 “^”——按位异或
如:
int main(){
int a=3;
int b=5;
int c=a&b;
printf("%d\n",c);
return 0;
}
其代码最终的打印结果为“1”
“&”按位与中的“与”是合并一起的意思。
在C语言“按位与”中,“0”表示假,“1”表示真。
3转为二进制为011;5——101
a&b——与过后其值为001
简单一点,互异为0,同为本身。
扩展:
十进制转二进制方法——凑数法【注:这里讲不清楚,具体原理大家可以自行查询。】
每一个二进制都有一定的权重值,即十进制对应的值。
用二进制给出的十进制来倒推
如:3——2+1——11 4——4+1——101
若将int c=a&b;改为int c=a|b;其打印结果为7
“按位或”指所对应的二进制序列只要有1个“1”就可以了。
当“0”和“1”相“或”的时候,只要有“1”或的结果为“1”(即遇“1”得“1”)
如:
0 1 1
1 0 1
1 1 1 ——按位或的结果
若再改为int c=a^b;(这里“^”不是次方,是“异或”),其最后的打印结果为6。
异或的计算规律:
对应的二进制相同,则为0;对应的二进制相异,则为1。
如:
0 1 1
1 0 1
1 1 0 ——异或之后的值
最后在补充,这三个&按位与、|按位或、^按位异或,这三种操作符有自己独特的运用场景。(后期详细讲解。)
赋值操作符:
一个等号(=)叫做赋值【即把值赋给一个变量】
两个等号(==)叫判断相等。【判断是否相等】
除了a=20;这样的赋值方式,其实还有另外一种——即a=a+10;这时是给a加上10再赋给a
这种写法可简化成a+=10;这两种2写法作用一样
“a+=10”这种写法是给a本身加上10。
类似的——
a=a-20; ——a-=20;
a=a*2; ——a*=2;
赋值操作符是为了简便化
这些操作符也叫复合赋值符
单目操作符:
int sum=a+b;
int main(){int a=10;printf("%d\n",a);printf("%d\n",!a);return 0;}打印结果为 100
举例:int main(){int a=10;printf("%d\n",sizeof(a));return 0;}
int main(){int arr[10]={0};//这里指10个整形元素的数组printf("%d\n",sizeof(arr));return 0;}打印结果为40运算方法:10×sizeof(int)=40
int main(){int arr[10]={0};int sz=0;printf("%d\n",sizeof(arr));sz=sizeof(arr)/sizeof(arr[0]);return 0;}其打印结果为——40sz=10
int arr[10]={0};或int arr[ ]={1,2,3,4,5,6,7,8,9,0}(前后知其一即可)
int arr[ ]={1,2,3,4,5,6};