目录
前言:
在初识C语言中小编就与大家分享了操作符的一些小知识和大家一起认识了操作符,接下来小编带大家一起再次的学习和深入的了解操作符领略不一样的操作符。
操作符:
算数操作符:
算数操作符有:/、-、+、*、%
1.% :其中%两端的操作数必须为整型。
2. / :计算时若两端都为整型则计算结果只保留整数部分,若两端有一个为浮点型则计算的结果就为浮点型。(如一下代码所示)
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
float a = 6 / 5;
float b = 6.0 / 5;
float c = 6 / 5.0;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
代码截图:
移位操作符:
移位操作符:<< 、>>
<<:左移
特点:左边的丢弃,右边补0。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 2;
int b = a << 1;
printf("%d\n", a);//保持不变 - 2
printf("%d\n", b);//将a的二进制位向左移动一位 - 4
return 0;
}
代码截图:
解析示意图:
>>:右移
右移与左移有点区别,右移有两种右移法:
1.算数右移:右边丢弃,左边补原符号位。
2.逻辑右移:右边丢弃,左边补0。
位操作符:
位操作符有:&、|、^
注意:位操作符的操作数必须为整数
&:按位与(按二进制位进行与运算)
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a & b;
printf("%d\n", c);// 1
return 0;
}
解析如下所示:
|:按位或(按二进制位进行或运算)
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a | b;
printf("%d\n", c);// 7
return 0;
}
解析如下所示:
^:按位异或
规则:相同为0,不同为1。
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a ^ b;
printf("%d\n", c);// 6
return 0;
}
解析如下所示:
赋值操作符:
赋值操作符有:=、+=、*=、/=、>>=、<<=、%=
注意:=是进行赋值,==是进行判断。
单目操作符:
单目操作符有:!、-、+、&、sizeof、~、--、++、*、(类型)
!:逻辑反操作符
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int flage = 0;
if (flage)//flage为真时打印haha
printf("haha\n");
if (!flage)//flage为假时打印xixi
printf("xixi\n");
return 0;
}
代码运行结果如下所示:
sizeof:计算操作数的类型长度(以字节为单位)
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
short a = 0;
int b = 0;
int arr1[10] = { 0 };
char arr2[10] = { 0 };
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);//计算为变量名时括号可省
printf("%d\n", sizeof(int));//计算为关键字的时候不可省略括号
printf("%d\n", sizeof(b));
printf("%d\n", sizeof(arr1));//可以计算数组的大小
printf("%d\n", sizeof(arr2));
return 0;
}
代码截图如下所示:
~:对一个数的二进制位按位取反
&:取地址操作符
*:解引用操作符
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 4;
int* pa = &a;//*---说明pa是指针变量
*pa = 10;//*--对pa解引用
printf("%d\n", a);
return 0;
}
代码截图如下所示:
(类型):强制类型转换
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = (int)3.14;
printf("%d\n", a);
return 0;
}
代码截图如下所示:
关系操作符:
关系操作符有:>、>=、<、<=、!=、==
逻辑操作符:
逻辑操作符有:&&、||
&&:逻辑与
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 2;
int b = 0;
if (a && b)//有假则假
{
printf("haha\n");
}
else
{
printf("xixi\n");
}
return 0;
}
代码截图如下所示:
||:逻辑或
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 2;
int b = 0;
if (a || b)//有真则真
{
printf("haha\n");
}
else
{
printf("xixi\n");
}
return 0;
}
代码截图如下所示:
注意:
1.&&:若有一个为0则往后的表达式就无须计算了。
2.||:若有一个为1则往后的表达式就无须计算了。
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
//1.&&
i = a++ && ++b && d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
//2.||
//i = a++ || ++b || d++;
//printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
return 0;
}
其中1.&& 的运行结果如下所示:2.||的运行结果如下所示:
条件操作符:
条件操作符又称三目操作符,(exp1?exp2:exp3)
若exp1成立则计算结果为exp2的值否则为的exp3的值。
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//用条件运算符来计算最大值
int main()
{
int a = 4;
int b = 7;
int max = (a > b ? a : b);
printf("max = %d\n", max);
return 0;
}
代码截图如下所示:
逗号表达式:
(exp1,exp2,exp3,……,expn)
逗号表达式的值为expn的值。
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 3;
int b = 4;
int c = 5;
int d = (a++, c = a + b, b = a + c);
printf("d = %d\n", d);//计算的结果为b的值
return 0;
}
代码截图如下所示:
下标引用操作符:
[ ]:例子如下所示。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
printf("%d\n", arr[3]);//其中[]为下标引用操作符
return 0;
}
代码运行截图如下所示:
函数调用操作符:
():例子如下所示。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 2;
int b = 3;
int ret = Add(a, b);//其中()为函数调用操作符
printf("ret = %d\n", ret);
return 0;
}
代码运行截图如下所示:
结构成员访问操作符:
结构成员访问操作符有:.、->
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct Book
{
char name[10];
char id[10];
int price;
};
int main()
{
struct Book b = {"C语言","0x0060",30};
struct Book* pb = &b;
//通过.操作符来访问
printf("%s\n", b.name);
printf("%s\n", b.id);
printf("%d\n", b.price);
printf("%s\n", (*pb).name);
printf("%s\n", (*pb).id);
printf("%d\n", (*pb).price);
//通过->来访问
printf("%s\n", pb->name);
printf("%s\n", pb->id);
printf("%d\n", pb->price);
return 0;
}
代码截图如下所示:
表达式求值:
1.隐式类型转换:
整型提升:整型提升是按照变量类型的符号位来提升的。
提升时我应该怎么补前面的位呢?规则如下所示。
有符号位:
负数:补1。
正数:补0。
无符号位:高位直接补0。
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
char a = 3;
char b = 127;
char c = a + b;
printf("%d\n", c);
return 0;
}
代码运行截图:
解析如下图所示:
2.算术转换:
向字节长的,精度高的转换。
3.操作符属性:
影响:
①:操作符的优先级。
②:操作符的结合性。
③:是否控制求值顺序。
总结:虽然我们有很多操作符的优先性,但是我们写出的表达式也不能通过操作符的属性确定唯一的计算路径,那么这个表达式就是问题表达式。
结束语:
这次小编与大家分享了C语言中我们常见到的操作符,希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)