程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java、鸿蒙、嵌入式、人工智能等开发,专注于程序员成长的那点儿事,希望在成长的路上有你相伴!君志所向,一往无前!
运算符
1.算术运算符
主要用于基本的数学运算,包括:
加法运算符(+):用于求两个数的和。
减法运算符(-):一是用于求两个数的差。
乘法运算符(*):实现两个数的乘法运算,同样适用于不同数值类型的乘法计算。
除法运算符(/):当用于两个整数相除时,结果取整(舍去小数部分), 若除数或被除数至少有一个是浮点数时,则进行正常的浮点数除法运算,得到带有小数的结果。
求余运算符(%):也叫取模运算符,用于求两个整数相除的余数,运算符的操作数必须为整数。
void f1(void)
{
//算术运算符 + - * / %
int num1=9;
int num2=2;
printf("求和:num1+num2=%d\n",num1+num2);
printf("求差:num1-num2=%d\n",num1-num2);
printf("求积:num1*num2=%d\n",num1*num2);
printf("求商:num1/num2=%d\n",num1/num2);
printf("求余:num1%%num2=%d\n",num1%num2);
}
2.关系运算符
用来比较两个值之间的关系,运算结果是布尔值(真或假,在 C 语言中用 1 表示真,0 表示假),包含:
等于运算符(==):判断两个操作数是否相等。注意与赋值运算符 “=” 区分开。
不等于运算符(!=):判断两个操作数是否不相等。
大于运算符(>):判断左边的操作数是否大于右边的操作数。
小于运算符(<):判断左边操作数是否小于右边操作数。
大于等于运算符(>=):判断左边操作数是否大于等于右边操作数。
小于等于运算符(<=):判断左边操作数是否小于等于右边操作数。
void f2(void)
{
//关系运算符 > < >= <= == !=
int num1=13;
int num2=9;
printf("大于:num1>num2=%d\n",num1>num2);
printf("小于:num1<num2=%d\n",num1<num2);
printf("大于等于:num1>=num2=%d\n",num1>=num2);
printf("小于等于:num1<=num2=%d\n",num1<=num2);
printf("相等:num1==num2=%d\n",num1==num2);
printf("不等于:num1!=num2=%d\n",num1!=num2);
}
3.逻辑运算符
用于对布尔值进行逻辑运算,结果同样为布尔值,包括以下:
逻辑与运算符(&&):只有当两个操作数的值都为真(1)时,整个逻辑表达式的值才为真(1);只要有一个操作数为假(0),表达式的值就为假(0)。并且它具有短路特性,当计算到第一个操作数为假时,就不会再计算第二个操作数了。
逻辑或运算符(||):只要两个操作数中有一个为真(1),整个逻辑表达式的值就为真(1);只有当两个操作数都为假(0)时,表达式的值才为假(0)。它也有短路特性,当计算到第一个操作数为真时,就不会再计算第二个操作数了。
逻辑非运算符(!):用于对一个布尔值取反,若操作数为真(1),则取反后为假(0);若操作数为假(0),则取反后为真(1)。
void f3(void)
{
//逻辑运算符 && || !
int num1=13;
int num2=9;
printf("逻辑与:num1&&num2=%d\n",num1&&num2);
printf("逻辑或:num1||num2=%d\n",num1||num2);
printf("逻辑非:!num1=%d\n",!num1);
}
4.位运算符
对整数在二进制位级别上进行操作,主要包括:
按位与运算符(&):将两个整数对应的二进制位进行与运算,只有当两个对应位都为 1 时,结果位才为 1,否则为 0。
按位或运算符(|):把两个整数对应的二进制位进行或运算,只要两个对应位中有一个为 1,结果位就为 1。
按位异或运算符(^):对两个整数对应的二进制位进行异或运算,当两个对应位不同时,结果位为 1,相同时结果位为 0。
取反运算符(~):对一个整数的二进制位进行取反操作,即 0 变为 1,1 变为 0。
左移运算符(<<):将一个整数的二进制位向左移动指定的位数,右边空出的位用 0 填充。
右移运算符(>>):把一个整数的二进制位向右移动指定的位数,对于无符号数,左边空出的位用 0 填充;对于有符号数,如果是正数,左边空出的位用 0 填充,若是负数,左边空出的位用符号位(最高位)填充。
void f4(void)
{
//位运算符
int num1=13;
int num2=9;
printf("位与:num1&num2=%d\n",num1&num2);
printf("位或:num1|num2=%d\n",num1|num2);
printf("位异或:num1^num2=%d\n",num1^num2);
printf("位取反:~num1=%d\n",~num1);
}
5.赋值运算符
用于给变量赋值,包括:
最基本的是简单赋值运算符 “=”。
除此之外,还有复合赋值运算符:
加赋值运算符(+=)
减赋值运算符(-=)
乘赋值运算符(*=)
除赋值运算符(/=)
求余赋值运算符(%=)
左移赋值运算符(<<=)
右移赋值运算符(>>=)
按位与赋值运算符(&=)
按位或赋值运算符(|=)
按位异或赋值运算符(^=)
void f5(void)
{
//赋值运算符 = += -= *= /= %=
int num1=13;
int num2=9;
printf("赋值:num1=num2=%d\n",num1=num2);
printf("加法:num1+=num2=%d\n",num1+=num2);
printf("减法:num1-=num2=%d\n",num1-=num2);
}
6.三目运算符
也叫 条件运算符
语法格式为 表达式1? 表达式2 : 表达式3。
流程:先计算 表达式1 的值,如果其值为真(非 0),则整个条件表达式的值取 表达式2 的值;如果 表达式1 的值为假(0),则整个条件表达式的值取 表达式3 的值。
void f6(void)
{
//三目运算符
int num1=13;
int num2=9;
printf("三目运算:num1>num2?num1:num2=%d\n",num1>num2?num1:num2);
}
7.sizeof
sizeof 是 C 语言中的运算符,它属于单目运算符,用于获取数据类型或者变量所占用的字节数。
用于数据类型:
sizeof(数据类型),例如 sizeof(int),会返回 int 类型在当前编译环境下所占用的字节数。
在常见的 32 位编译环境中,sizeof(int) 的值通常为 4 字节;在 64 位编译环境下,有的编译器中 int 类型仍占 4 字节,不过这会因编译器和系统不同而有差异。
用于变量:
sizeof(变量名),比如已经定义了 int num; ,那么 sizeof(num) 就会返回变量 num 所占用的字节数,由于 num 是 int 类型,同样会返回对应编译环境下 int 类型所占用的字节数。
void f7(void)
{
//sizeof
printf("sizeof(int)=%d\n",sizeof(int));
printf("sizeof(char)=%d\n",sizeof(char));
printf("sizeof(float)=%d\n",sizeof(float));
printf("sizeof(double)=%d\n",sizeof(double));
printf("sizeof(long)=%d\n",sizeof(long));
printf("sizeof(long long)=%d\n",sizeof(long long));
}
是不是 sizeof 看起来有点像函数,因为使用了括号来包含操作对象,但它本质上不是函数,有着和函数明显不同的特点:
没有函数调用开销:函数调用时在运行阶段会有入栈、出栈等一系列操作开销,而 sizeof 是编译阶段就处理好的,不存在这样的运行时开销。
参数使用不同:函数的参数有实际的传值、传址等概念,并且参数类型需要严格匹配函数定义的参数类型要求等;而 sizeof 只是获取操作对象类型的字节数,操作对象可以是类型,也可以是变量,使用起来更灵活简单,不需要遵循函数参数那样严格的规则。
本篇就到这里啦,大家周一愉快哈!