移位表达式
左移操作符<<
左边抛弃,右边补零
右移操作符>>
1.逻辑右移
左边补零,右边丢弃
2.算数右移
左边补符号位,右边丢弃
注意:
1.左移一位相当于乘2,右移一位相当于除2,并且在内存中存放的是二进制的补码,且移位操作符只对int型数操作
2.移位操作符不要移动负数位,这个标准未定义
位操作符
&
|
^
注:操作数必须是整数,并且是补码**
a & a = 0;
a & 0 = a;
举例:
将0000 0000 0011 1111从右往左数的第5位的1变为0
解:0000 0000 0011 1111 & 1111 1111 1110 1111 = 0000 0000 0011 1111
将0000 0000 0011 1111从右往左数的第7位的0变为 1
0000 0000 0011 1111 | 0000 0000 0100 0000 = 0000 0000 0111 1111
赋值操作符 =
int x = 0;
int x = 10;
符合赋值符
*=
/=
%=
>>=
<<=
&=
|=
^=
单目操作符
!
-
+
&
sizeof
~
--
++
(类型)
temp = ++a;是先加1,再使用,等价于 a = a + 1,temp = a;
a ++;先使用,后加1,相当于 temp = a, a = a + 1;
**int a[10] = {0};
sizeof(a)
sizeof(&a)
&a
a
关系操作符
>
<
<=
!=
==
逻辑与逻辑或
逻辑与&&:当遇到一个表达式为0,后面的都不计算,整个表达式为0
逻辑或&&:当遇到一个表达式为1,后面的都不计算,整个表达式为1
条件操作符
exp1 ? exp2 : exp3
等价于
if(exp1)
{
exp2
}
else
{
exp3
}
逗号表达式
exp1,exp2,exp3...
下标引用 函数调用及结构成员
1.[]
操作数: 一个数组名 + 一个索引值
int arr[9] = {0};
[]的操作数为两个 arr和9
2.()
函数调用操作符,接受一个或多个操作数,第一个为函数名,其余都是参数
3.访问一个结构的成员
.结构体.成员名
->结构体指针->成员名
注意:
#include<stdio.h>
int main()
{
int arr[] = {0};
scanf ("%d",arr);
scanf("%d",&arr);
sizeof(&arr);
sizeof(arr);
return 0;
}