正数:原码=反码=补码
负数:原码—按位取反(符号位不变)à反码—加一—>补码
在内存中,是以补码的形式储存的。
1.操作符分类
算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员
2.算数操作符(+ - * / %)
(1)除了%操作符至海外,其他几个操作符可以作用于整数和浮点数
(2)对于/,如果两个操作数都为整数,执行整数除法。只要有浮点数就执行浮点数除法。
(3)%操作符,两个操作数必须是整数。
3.位移操作符(对补码进行操作)
<<左移操作符:左边抛弃,右边补0。
>>右移操作符:(1)逻辑位移—左边用0填充,右边丢弃
(2)算数位移—左边用原该值得符号位填充,右边丢弃
注意:(1)若操作数没有被赋值,单纯的位移不会发生变化。
(2)不可移动负位数。如>>-1
4.位操作符(两个操作数)
按位与:&,有0则为0,双方同时为1才取1.
按位或:|,有1则为1,双方同时为0才为0.
按位异或:^,相同为0,相异为1.(1)a^a=0 (2)0^a=a (3)异或是支持交换律的只针对整数。 a^a^b==a b^a^b=a.(这种方法不提倡)
5.赋值操作符
6.复合赋值负
7.单目操作符(只有一个操作数)
!逻辑反操作符 + - & sizeof ~ -- ++ * (类型)
sizeof后面的()可以省略。
8.关系操作符
9.逻辑操作符
&& 逻辑与 ||逻辑或
#include
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
} 结果为1 2 3 4.。 因为a==0,后面的就不执行了,因此只有a++。
10.条件操作符(三目操作符)
exp1 ? exp2 : exp3
真 计算 不计算
假 不计算 计算
11.逗号表达式
exp1 , exp2 , exp3,……..
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
12.
1.下标引用操作符[ ],
2.函数调用操作符( )
3.访问一个结构的成员 . 结构体.成员名 -> 结构体指针->成员名