提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
对于刚接触C语言的小伙伴来说,操作符可能是很大一难点,今天我就向大家介绍一些操作符(注:操作符也被叫做:运算符,是不同的翻译,意思是⼀样的哈),有算术操作符,赋值操作符,单目操作符,关系操作符,条件操作符,逻辑操作符等等 。
提示:以下是本篇文章正文内容,下面案例可供参考
一、算术操作符
示例:在写代码时候,⼀定会涉及到计算。
C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是: + - * \ % ++ --
这些操作符中+ - * \ %
是双⽬操作符(有2个操作数的,位于操作符两端的就是它们的操作数)。
++ --
是单目操作符(只有1个操作数)。
1.“加减乘”
例如:
#include <stdio.h>
int main()
{
int x = 20 + 56;//算术操作符“+”
int y = 56 - 20;//算术操作符“-”
printf("%d\n", x * y);//算术操作符“*”
printf("%d\n", x);
printf("%d\n", y);
return 0;
}
2.“除和取余”
算术操作符“/”和“%”较其他三种特殊一点:
“/”的两端如果是整数,执⾏的是整数除法,得到的结果也是整数,如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。
例如:
#include <stdio.h>
int main()
{
float x = 6.0 / 4;
float y = 6 / 4;
printf("%f\n", x); // 输出 1.500000
printf("%f\n", y); // 输出 1.000000
return 0;
}
运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。(负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定)
例如:
#include <stdio.h>
int main()
{
int x = 6 % 4; // 2
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
return 0;
}
3.“自增和自减”
++是⼀种⾃增的操作符,⼜分为前置++和后置++,–是⼀种⾃减的操作符,也分为前置–和后置–.
由于++和–的使用是一样的,这里我就只介绍++
前置++(先+1,再使用)
int a = 10;
int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
//这里先将a+1,然后将得到的值赋值给b
//所以运行结果是a=11 b=11
后置++(先使用,再+1)
int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
//这里先将a=10赋值给b,然后a再+1
//所以运行结果是a=11 b=10
二、赋值操作符
1.赋值操作符“=”
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
例如:
int a = 100;//初始化
a = 200;//赋值,这⾥使⽤的就是赋值操作符
赋值操作符 = 是⼀个随时可以给变量赋值的操作符。
2.复合赋值符“+= -= *= /=”
例如:
a+=4 等价于 a=a+4
a-=4 等价于 a=a-4
a*=4 等价于 a=a*4
a/=4 等价于 a=a/4
三、关系操作符
C 语⾔⽤于⽐较的表达式,称为 “关系表达式”,⾥⾯使⽤的运算符就称为“关系运算符”,主要有 > < >= <= == !=
例如:
a > b;//大于
a < b;//小于
a >= b;//大于等于
a <= b;//小于等于
a == b;//等于
a != b;//不等于
关系表达式通常返回 0 或 1 ,表⽰真假。
C 语⾔中, 0 表⽰假,所有⾮零值表⽰真。⽐如, 20> 10 返回 1 , 10 > 20 返回 0 。
注意
:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆
注意
:多个关系运算符不宜连⽤
四、条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果
exp1 为假, exp3 计算,计算的结果是整个表达式的结果
例如:
m = a>b ? a : b;
//若a>b是真,则a是整个表达式的结果
//若a>b是假,则b是整个表达式的结果
//因此m是a和b之间比较大的数
五、逻辑操作符
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符
1.逻辑取反运算符(!)
“!”用于改变单个表达式的真假
例如:
2.逻辑与运算符(&&)
“&&”就是并且的意思(两侧的表达式都为真,则为真,否则为假)
例如:
对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏
3.逻辑或运算符(||)
“||”就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
例如:
对于||操作符来说, || 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数
六、移位操作符
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数,并且是对二进制内存中的补码进行移位操作
1.左移操作符(<<)
规则:左边抛弃、右边补0
例如:
2.右移操作符(>>)
规则:
- 逻辑右移:左边⽤0填充,右边丢弃
- 算术右移:左边⽤原该值的符号位填充,右边丢弃
注意
:大多数编译器中是算术右移
例如:
逻辑右移:
算术右移:
注意
:对于移位运算符,不要移动负数位,这个是标准未定义的
七、位操作符
注意
:位操作符的操作数必须是整数
1.按位与(&)
计算规则:对应的二进制位(补码)进行与运算(只要有0就是0,两个同时为1才是1)
例如:
int main()
{
int a = 3;
int b = -5;
int c = a & b;
//按(2进制)位与
//计算规则:对应的二进制位进行与运算
//只要有0就是0,两个同时为1才是1
//00000000000000000000000000000011 --- 3的补码
//10000000000000000000000000000101 --- -5的原码
//11111111111111111111111111111010 --- -5的反码
//11111111111111111111111111111011 --- -5的补码
//00000000000000000000000000000011 --- 3的补码
//00000000000000000000000000000011
printf("c = %d\n", c);//3
return 0;
}
2.按位或(|)
计算规则:对应的二进制位(补码)进行或运算(只要有1就是1,两个同时为0才是0)
例如:
int main()
{
int a = 3;
int b = -5;
int c = a | b;
//按(2进制)位或
//计算规则:对应的二进制位进行或运算
//只要有1就是1,两个同时为0才是0
//00000000000000000000000000000011 --- 3的补码
//10000000000000000000000000000101 --- -5的原码
//11111111111111111111111111111010 --- -5的反码
//11111111111111111111111111111011 --- -5的补码
//00000000000000000000000000000011 --- 3的补码
//11111111111111111111111111111011
//
printf("c = %d\n", c);//-5
return 0;
}
3.按位异或(^)
计算规则:对应的二进制位(补码)进行异或运算(相同为0,相异为1)
例如:
int main()
{
int a = 3;
int b = -5;
int c = a ^ b;
//按(2进制)位异或
//计算规则:对应的二进制位进行异或运算
//相同为0,相异为1
//00000000000000000000000000000011 --- 3的补码
//10000000000000000000000000000101 --- -5的原码
//11111111111111111111111111111010 --- -5的反码
//11111111111111111111111111111011 --- -5的补码
//00000000000000000000000000000011 --- 3的补码
//11111111111111111111111111111000
//10000000000000000000000000000111
//10000000000000000000000000001000
//
printf("c = %d\n", c);//-8
return 0;
}
4.按位取反(~)
计算规则:对应的二进制位(补码)进行取反运算(0取反变为1,1取反变为0)
例如:
int main()
{
int a = 1;
int b = ~a;
//00000000000000000000000000000001 -- 1的补码
//11111111111111111111111111111110(补码)
//10000000000000000000000000000001
//10000000000000000000000000000010
//
printf("%d\n", b);//-2
return 0;
}
八、逗号操作符
exp1, exp2, exp3, …expN
逗号表达式,就是⽤逗号隔开的多个表达式(逗号操作符就是表达式中的“,”)
逗号表达式,从左向右依次执行。整个表达式的结果是最后⼀个表达式的结果
九、指针操作符
指针操作符分为两种:&取地址操作符
和*解引用操作符
1.取地址操作符(&)
例如:
// int a = 100;
// printf("%p\n", &a);//&取地址操作符(用%p打印取出的地址)
// int * pa = &a;//pa 是指针变量 - 存放地址
2.解引用操作符(*)
例如:
// int a = 100;
// int * pa = &a;
// *pa = 20;//* 是解引用操作符,*pa 等价于a
// //即修改a为a = 20
十、求字节操作符(sizeof操作符)
sizeof 中C语⾔是⼀个关键字(sizeof不是函数),是可以计算类型或者变量⼤⼩的(sizeof计算的是变量或类型创建变量的内存大小,和内存里存放什么数据没有关系)
例如:
// char arr[10] = "abcdef";
// printf("%d\n", sizeof(arr));//计算整个数组的大小,该数组10个元素,每个元素1个字节,总大小=10*1=10
// int a = 100;
// printf("%d\n", sizeof(a));//a里面有一个元素,占四个字节1*4=4
// printf("%d\n", sizeof(int));//也是4
总结
本文介绍了10种C语言常用操作符,作为C语言编程的最基础工具,操作符必须精通并且会使用。
最后,希望我的文章对大家的学习有帮助,有不足的地方也可以指出来。