操作符
1.如果想执行除法,且结果有小数,则需要改数据类型为浮点型,且除数和被除数应该至少有一个为浮点型。
2.右移操作符分两种,第一种为算术右移,右边丢弃,左边补原符号位(正数补0,负数补1)通常
第二种为逻辑右移,右边直接丢弃,左边补0
左移操作符,左边丢弃,右边补0
3.整数表现形式有三种:原码,反码,补码,而存储形式为补码
10000000000000000000000000000001--原码
11111111111111111111111111111110--反码--原码取反
11111111111111111111111111111111--补码--反码+1
4.&按二进制为与,有0就取0 两个都是1取1
|按二进制位或,有1就取1,两个都是0就取0
^按位异或,对应二进制位相同就为0,相异就为1
5.数组的类型是类型加[],例如int arr[10]的类型是int [10]
如果用sizeof来表示类型,那么类型需要加括号()
6.~按位取反,打印的是原码
a|(1<<2)先变成某数 a&(~(1<<2))再还原回来
7.强制类型转换,在括号里放类型 int a=(int)3.14
8.如果逻辑或前是真,则不再进行后面的运算
如果逻辑与前是假,则不再进行后面的运算
9.三目操作符exp1?exp2:exp3 真则exp2 假则exp3
10.调用函数时的()就是函数调用操作符
11.(*ps).age==ps->age
12.int main()
{
char a = 127;
//00000000000000000000000001111111 因为是char类型,发生整型截断所以其形式为01111111
char b = 3;
//00000000000000000000000000000011 同理 其形式为00000011
char c = a + b;
//此时因为需要相加,所以a和b发生整型提升,其形式变为普通整型
//00000000000000000000000001111111
//00000000000000000000000000000011 相加
//00000000000000000000000010000010 因为c是char类型,所以再次发生整型截断
//100000010 所以此时c的符号位为负号,因为接下来要用%d打印整型,所以再次发生整型提升,但是符号位为1,所以补1
//11111111111111111111111110000010 然后这个是存储的补码,而打印出来的是原码,所以要进行反码、原码的转换
//11111111111111111111111110000001 反码=补码-1
//10000000000000000000000001111110 原码=反码取反 得到-126
printf("%d\n", c);
return 0;
}
13.逗号表达式和逻辑表达式是控制求值顺序的