操作符
(简单认识,后面具体学)
算术操作符
+ - * / %
移位操作符
>>(右移操作符) <<(左移操作符)
位操作符
& 按位与 | 按位或 ^ 按位异或
赋值操作符
= 等 += 加等 -= 减等 *= 乘等 /= 除等 &= 按位与等 |= 按位或等 ^= 按位异或等 <<左移等
>> 右移等
单目操作符
! | 逻辑反操作 |
+ | 正值 |
- | 负值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
++ | 前置、后置++ |
-- | 前置、后置-- |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
如:a+b 有两个操作数(a和b),这样的叫做双目操作符
而单目操作符:只有一个操作数
int main()
{
int a = 3;
printf("%d\n", !a);//C语言中,0表示假,非0表示真。
return 0;
}
单目操作符!代表逻辑反操作,a=3,非0,所以!a把真变成假,即0
int main()
{
int a = 0;
printf("%d\n", !a);//C语言中,0表示假,非0表示真。
return 0;
}
反之,当a=0时,!a把假变为真,即1(正常来说,非0都可以说为真,!a时,默认1)
sizeof计算变量大小⬇⬇⬇
int main()
{ //sizeof是一个操作符,不是函数
//计算类型或者变量大小的
int a = 11;
printf("%d\n", sizeof(a));
return 0;
}
sizeof计算数组大小⬇⬇⬇
int main()
{
int arr[10] = { 0 };
printf("%d\n", sizeof(arr));
return 0;
}
(10个元素,每个元素是4个字节,所以输出的是40)
进阶:用总数组大小除以数组中一个元素的大小,就等于数组中的元素
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n",sz);
return 0;
}
~:按位取反,把所有二进制位数字,1变成0,0变成1
int main()
{
int a = 0;
printf("%d", ~a);
return 0;
}
输出结果为-1
一个整数的二进制表示有三种:原码,反码,补码
整数在内存中储存的是补码
在负整数中,原码反码补码不同
例如:-1
源码:10000000000000000000000000000001(最高位为符号位,最低位为有效位)
反码:11111111111111111111111111111110(符号位不变,其他位按位取反)
补码:11111111111111111111111111111111(反码的二进制序列加一)
在正整数中,源码反码补码相同
例如:1
源码=反码=补码=00000000000000000000000000000001
所以在上述代码中,a=0,0的二进制序列为00000000000000000000000000000000经过~按位取反后变为11111111111111111111111111111111,因为整数在内存中储存的是补码,所以输出结果为-1
++,--
int main()
{
int a = 10;
int b = ++a;//前置++,先++后使用
printf("%d\n", b);
printf("%d\n", a);
return 0;
}
前置++,先++,后使用
即先a+1,后让b=a
结果为11,11
int main()
{
int a = 10;
int b = a++;//后置++。先使用后++
printf("%d\n", b);
printf("%d\n", a);
return 0;
}
后置++,先使用,后++
即先让b=a,后a+1
结果为10,11
关系操作符
> < >= <= !=(用于测试“不相等”) ==(用于测试“相等”)
逻辑操作符
&& 逻辑与(并且) || 逻辑或(或者)
条件操作符
条件操作符(三目操作符)
exp1?exp2:exp3
表达式1(exp1)如果成立,表达式2(exp2)计算,整个表达式的结果是exp2的结果
表达式1(exp1)如果不成立,表达式2(exp2)不计算,表达式3(exp3)计算,整个表达式的结果是exp3的结果
例如:这段代码用普通方法表示为
int main()
{
int a = 0;
int b = 3;
int max = 0;
if (a > b)
max = a;
else
max = b;
printf("%d\n", max);
return 0;
}
而用条件操作符(三目操作符)表示为
int main()
{
int a = 0;
int b = 3;
int max = 0;
max = a > b ? a : b;
printf("%d\n", max);
return 0;
}
逗号表达式
exp1,exp2,exp3,...expn
逗号隔开的一串表达式
int main()
{
int a = 0;
int b = 3;
int c = 5;
int d = (a = b + 2, c = a - 4, b = c + 2);
printf("%d\n",d);
return 0;
}
逗号表达式是从左到右依次计算的
整个表达式的结果是最后一个表达式的结果
所以输出结果为3
下标引用、函数调用和结构成员
[] 下表引用 () 函数调用 . ->
2024/7/30 20.00