算术运算符 | + - * / % | 运算的结果形式与参与运算的数的形式有关 (int a=9/2 结果为4 ) (float a=9/2 结果为4.000000 )( 但如果为float a=9/2 .0结果为 4.50000) |
移位操作符 | << >> | 向左移为乘2 右移位除2![]() |
位操作符 | & | ^ ~ | &:相同位全为1则为否则为0 |:相同位有1就为1 否则为0 ^:相同位相同则位0 相同位不同就为1 ~:每一位都取反
|
赋值操作符 | ![]() | (a+=b: a=b+a) |
单目操作符 | ![]() | 如果a不等于0则!a为0 如果a=0则!a为1![]() |
单目操作符:操作数只有一个 双目:操作数有两个
按位取反 ~
int a=0 printf("%d",~a)则打印出的数字位-1 解题 过程(在计算机中所存的是数字的补码 打印的是原码 0在内存中存的是32位0 按位取反后的到32位1 32位1也是直接存在内存中的 因为32位1第一位是1 则存的这个数应该为负数 所以打印时要转为原码 即先减1再取反(符号位不去反)得到-1)
计算机中 内存中存正数内存中就是该正数的二进制形式 因为正数的 补码原码反码相同
a++ | 先让这个表达式使用a,在赋给a=a+1 | ![]() |
++a | 先让a=a+1在让这个表达式使用赋值后的a |
关系操作符 | == (!=)> < >= <= | |||
三目运算(条件操作符) | ![]() | |||
![]() | ![]() | ![]() | ||
逗号运算 | ![]() | 整个表达式的值取最后一个式子的值 | ||
强转:(要转的类型)数据 | 列如 (int)3.13 |
逻辑操作符 | && (与运算); || (或运算) 1&&9=1 1||0=1 |
Static
第一张图 调用test函数时创建了一个a=1出了这个变量的作用域后 变量就被销毁了
第二张图 用static修饰变量 则变量就不会被销毁 在第二次使用时 函数中第一句话就没用了 然后a中存放的是2 自加后就存放的是3了
Static 修饰局部变量 改变了变量的生命周期(本质上改变了变量的存储类型 )
static修饰全局变量 使得这个全局变量只能在自己的源文件使用 其他的源文件就不能再使用了(全局变量可以被其他源文件使用是因为全局变量具有外部链接属性而被修饰后就变为内部链接属性了其他源文件就不能使用了)
static修饰函数 与修饰全局变量类似 将函数的外部链接改变为了内部链接
define定义宏
define可以定义符号 #define max 100
define可以定义宏 但是定义的宏相当与是替换了 运算
#define Add(x,y) x+y
printf("%d",add(1,4))输出值为5
如果写为 printf(“%d",4*add(1.4))输出值不等于20而是8 其相当于是4*1+4
如果想的到20 则写出 #define add(x,y) (x+y)