单目操作符:操作数只有一个 双目:操作数有两个
按位取反 ~
int a=0 printf("%d",~a)则打印出的数字位-1 解题过程(在计算机中所存的是数字的补码 打印的是原码 0在内存中存的是32位0 按位取反后的到32位1 32位1也是直接存在内存中的 因为32位1第一位是1 则存的这个数应该为负数 所以打印时要转为原码 即先减1再取反(符号位不去反)得到-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)