C语言操作符
算术操作符 + - * / % %左右操作数必须都是整型 移位操作符 << ?>> 右移操作符:1.算术右移:右边丢弃,左边补原符号位 ? ? ? ? ? ?2.逻辑右移:右边丢弃,左边补0 左移操作符:左边丢弃 右边补0 警告:对于移位操作符,不要移动负数位,这个标准是未定义的 int num = 10; num>>-1;//error int main() { ? ? int a = 16; ? ?int b = a >> 1;//移动二进制位 ?16 ? 00010000 ? ? printf("%d\n", b); ? ? return 0; }
位操作符 ?& 按二进制位与? | 按二进制位或 ?^ 按二进制位异或 操作数必须是整数
int main()//不适用临时变量,交换两个数的值 { ? ? int a = 3; ? ?int b = 5; ? ?? a = a + b;//加减法,可能会溢出 ? ? b = a - b; ? ? a = a - b; ? ? a = a ^ b;//异或法 ? ?b = a ^ b; ? ?a = a ^ b; ? ? printf("a=%d,b=%d\n", a, b);
? ? return 0; }
int main() { ? ? int num = 0; ? ? int count = 0; ? ?scanf("%d", &num); 统计num的补码中有几个1 while (num)//无法计算负数 { ? ?if (num % 2 == 1) ? ? ? ?count++; ? ?num = num / 2; } num&1 == 1; 最低位一定是1 ? ?int i = 0; ? ? for (i = 0; i < 32; i++) ? ? { ? ? ? ?if (1 == ((num >> i) & 1)) ? ? ? ? ? ? count++; ? ? } ? ? printf("%d\n", count); ? ?return 0; }
赋值操作符 可以连续赋值 复合赋值符 单目操作符 只有一个操作数 &取地址 int* p =&a;取地址操作符 *p 解引用操作符 sizeof计算的是变量所占内存空间的大小,单位是字节
int main() { ? ? short s = 0; ? ?int ?a = 10; ? ? printf("%d\n", sizeof(s = a + 5));//sizeof内部表达式并不参与运算? ? ? printf("%d\n", s); }
~按二进制位取反
int main() { ? ? int a = 0; ? ? printf("%d\n", ~a); } 前置++,先++。后使用 后置++,先使用,后++ 强制类型转换(type) 关系操作符 注意 ==判断相等 =赋值操作符 逻辑操作符? ?&&逻辑与 ||逻辑或 ?条件操作符 exp1?exp2:exp3 都好表达式 用来隔开多个表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果 下标引用操作符 操作数:一个数组名+一个索引值 ?函数调用操作符 ? 接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数
?
|