算术操作符:
/ 一定要注意,1 / 2 —>整型除法,结果是0。1.0 / 2 ,1 / 2.0 或者 1.0 / 2.0 —>浮点数除法,结果是0.5。
% —> 取模操作符,取模操作符的两端必须是整数。
移位操作符:
移位操作符移动的是二进制位。
正整数的原码,反码,补码都相同。
负数的原码是对应的正数的原码的符号位取负。
原码的符号位不变,其他位按位取反就是反码。
反码 + 1 就是补码。
整数在内存中存储的是补码。
左移操作符:左边丢弃,右边补0。
右移操作符:
算术右移:右边丢弃,左边补原符号位。
逻辑右移:右边丢弃,左边补 0 。
一般编译器都是采用算术右移的。
对于移位运算符,不要移动负数位,这是标准未定义的。
位操作符:
& --- 按二进制位与
| --- 按二进制位或
^ --- 按二进制位异或
%d 打印一个有符号的整数。
不创建临时变量(第三个变量),实现两个数的交换。
#include <stdio.h>
//不创建临时变量(第三个变量),实现两个数的交换。
int main()
{
int a = 3;
int b = 5;
printf("交换前:a = %d,b = %d\n",a,b);
a = a + b;
b = a - b;//a+b-b=a
a = a - b;//a+b-a=b
printf("交换后:a = %d,b = %d\n",a,b);
return 0;
}
这种方法有溢出的风险。
#include <stdio.h>
//不创建临时变量(第三个变量),实现两个数的交换。
int main()
{
int a = 3;
int b = 5;
printf("交换前:a = %d,b = %d\n",a,b);
a = a ^ b;//a^a = 0,a^0 = a
b = a ^ b;//a^b^b = a
a = a ^ b;//a^b^a = b
printf("交换后:a = %d,b = %d\n",a,b);
return 0;
}
异或操作符支持交换律,a^a = 0,a^0 = a,a^b^b = a,a^b^a = b,这种计算方式不会有进位,位数不会发生变化,所以不会有溢出风险。
赋值操作符:=
单目操作符:
单目操作符:只有一个操作数。
双目操作符:操作符有两个操作数。
C语言中 0 表示假,非 0 表示真。
sizeof 是一个操作符,计算的是变量所占内存空间的大小,或是计算类型所创建的变量占据内存空间的大小,单位是字节。
前置 ++ ,前置 -- , 先 ++ , -- ,再使用。
后置 ++ ,后置 -- ,先使用,再 ++,-- 。
不管是什么类型的指针,大小总是4个字节(32位机器)或8个字节(64位机器)。
sizeof 是操作符,不是函数。
strlen 是库函数,用来求字符串长度。
if("abc" == "adcd")
这样写是在比较两个字符串的地址。
两个字符串比较应该使用 strcmp 库函数。