目录
操作符
算术操作符
+ - * / %
#include<stdio.h>
int main()
{
int a = 9 / 2;
float b = 9 / 2;
float c = 9 / 2.0;
int d = 9 / 2.0;
printf("%d\n", a);
printf("%f\n", b);
printf("%f\n", c);
printf("%d\n", d);
%取余(取模) 9%4=1
}
运行结果
移位操作符
>> <<
左移动操作符 -- 移动的是二进制位
例如 int a = 2 ,因为int为整型,int整型为4个字节=4*8 =32 位
00000000 00000000 00000000 00000010
int b=a<<1 向左移动一位
00000000 00000000 00000000 00000100
int a = 2;
int b = a << 1;//左移动
int c = a >> 1;//右移动
printf("%d\n", b);
printf("%d\n", c);
运行结果:
位操作符
& 按位与^ 按位或| 按位异或
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
复合赋值符: += -= *= /= &= ^= |= >>= <<=
a=a+5 a+=5
单目操作符
! 逻辑反操作 //c语言中0表示假,非0就是真- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置、后置 --++ 前置、后置 ++* 间接访问操作符 ( 解引用操作符 )( 类型 ) 强制类型转换
//c语言中0表示假,非0就是真
int a =10;
printf("%d\n",!a);//结果为 0
int a =0;
printf("%d\n",!a);//规定结果为 1
if(a)
{
//如果a为真,做事
}
if(!a)
{
//如果a为假,做事
}
sizeof是一个操作符,是一个计算类型或者变量的大小的,不是函数,通常()不省略
int a = 10;
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(a));//或者sizeof a
printf("\n");
int arr[10] = { 0 };
printf("%d\n", sizeof(arr));//计算的是数组的大小,单位字节 int占4个字节 40=10*4
printf("%d\n", sizeof(arr[0]));//下标0的元素大小 4
int s = sizeof(arr) / sizeof(arr[0]);//
printf("%d\n", s);
运行结果:
~按照二进制位取反,结果为b=-1,把所有二进制位中的数字,1变成0,0变成1
因为整数在内存中存储的是补码
一个整数的最高位表示符号位 1负 0正
一个整数的二进制表示有3种:
原码
反码
补码
int类型4个字节32位
负整数的计算
-1:
10000000 00000000 00000000 00000001(原码)
11111111 11111111 11111111 11111110 (反码)符号位不变,其他位取反 1变成0,0变成1
11111111 11111111 11111111 11111111 (补码)反码加1=补码 内存中存储的为补码
0:
00000000 00000000 00000000 00000000(原码)
按二进制位取反后:
11111111 11111111 11111111 11111111(为-1的补码,逆着推出原码 所以结果为-1)
正整数:原码、反码、补码相同
int a=0;
b= ~a;//~按照二进制位取反,结果为b=-1,把所有二进制位中的数字,1变成0,0变成1
--/--的使用
int main()
{
int a = 10;
int b = ++a; //前置++ 先++,后使用
printf("%d\n",b);//结果为11
printf("%d\n",a);//结果为11
int a = 10;
int b = a++; //后置++ 先使用,后++
printf("%d\n",b);//结果为10
printf("%d\n",a);//结果为11
}
强制类型转换 (类型)
int a1 = 3.14; //会有数据丢失警告 结果为3
int a2 = (int)3.14;//强制转换为int类型 结果为3
printf("%d\n", a1); //结果为3
printf("%d\n", a2); //结果为3
关系操作符
>>=<<=!= 用于测试 “ 不相等 ”== 用于测试 “ 相等 ”
逻辑操作符
&& 逻辑与 (并且)|| 逻辑或 (或者)
int a = 3;
int b = 5;
int c = a && b;结果为1 为真 非0即为真,编译器结果真为1
if(a && b)
{
}
int a = 3;
int b = 0;
int c = a && b;结果为0 为假,有一假为假
int d = a||b;结果为1 为真,有一真为真
printf("%d\n", c); 0
printf("%d\n", d); 1
if(a && b)
{
}
条件操作符
条件操作符也被称为三目操作符
exp1 ? exp2 : exp3
如果exp1为真(成立),exp2计算 ,整个表达式的结果:exp2的结果
如果exp1为假( 不成立),exp3计算 ,整个表达式的结果:exp3的结果
int a = 0;
int b = 3;
int max = 0;
/*if (a > b)
max = a;
else
max = b;
*/
max = a > b ? a : b;
printf("%d\n", max);//结果为 3
逗号表达式
exp1 , exp2 , exp3 , …expN
int a = 0;
int b = 3;
int c = 5;
int d = (a = b + 2, c = a - 4, b = c + 2); //a=5,c=1,b=3
//逗号表达式是从左向右依次计算的,整个表达式的结果是最后一个表达式的结果
printf("%d\n", d);//结果为3
下标引用、函数调用和结构成员
[ ] ( ) . ->
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[5]);//结果 6
其余未介绍到的操作符后期遇到时再详细讲解