1! 反转变量的真假
if (a)
{
当a为真时执行
}
if (!a)
{
当a为假时执行
}
2.sizeof 计算类型或变量大
printf("%d\n", sizeof(int));
int a = 0;
printf("%d\n", sizeof a);//sizeof求变量时后括号可省略
//sizeof计算数组
int arr[10];
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr[0]));
//sizeof计算数组内个数
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", sz);
3.~ 将数据按二进制反取,0变1,1变0
整数在内存中以补码形式存储
一个整数的二进制表达方式有三种:
1原码
2反码
2补码
如 -1: 负数计算 !!!正整数的原码、反码、补码相同
1000 0000 0000 0001(原码)-1的二进制表达
1111 1111 1111 1110(反码)-1的符号位不变,其他位反取
1111 1111 1111 1110(补码)在二进制形式下加1
4.逻辑操作符
1. && 并且 当左右均为真方为真
int a = 5;
int b = 4;
int c = a && b;
printf("%d\n",c);
2.|| 或者 左右有一个为真就算真
int a = 5;
int b = 4;
int c = a || b;
printf("%d\n", c);
5.条件操作符(三目操作符)
格式 表达式1 ? 表达式2 : 表达式3
逻辑 表达式1成立-- > 表达式2计算并将其结果作为整个式子的结果
表达式1不成立 > 表达式3计算并将其结果作为整个式子的结果
例子 比大小
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
int c = 0;
if (a >= b)
{
c = a;
}
else
{
c = b;
}
printf("max=%d", c);
int a = 0;
int b = 5;
int max = 0;
max = a > b ? a : b;
printf("%d\n",max);
6.逗号表达式 逗号隔开的一串表达式
格式 (表达式1, 表达式2, 表达式3, 表达式4)
注:逗号表达式从左到右依次计算 整个表达式的结果是最右边的表达式
例子
int a = 0;
int b = 5;
int c = 3;
int d = (a = b + 8, b = c - 4, c = a + b);
printf("%d\n", d);
7.函数调用操作符 如 () [] .
8.指针运算符 & * . ->
1. & (a)取地址: &a即为取变量a的地址
2. * (a) 乘法运算 (b) 表明变量为指针变量:int * ps = &a;其中int为变量a的类型 ps为指针 变量
3. . (a)结构体.成员变量
4. -> (a)结构体指针->成员变量名
struct stu s = { "梅比乌斯",20,99.9 };//结构体创建和初始化
printf("1:%s %d %lf\n",s.name,s.age,s.score);//结构体.成员变量
//下两种为已知结构体箭头指针
struct stu * ps = &s;
printf("2:%s %d %lf\n",(*ps).name,(*ps).age,(*ps).score);
printf("3:%s %d %lf\n", ps->name, ps->age, ps->score);//结构体指针->成员变量名