Hello,大家好,前面的文章里边介绍了算术、赋值以及移位操作符,这篇文章呢,就介绍一下C语言中的其他操作符吧~
目录
位操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用,函数调用和结构成员
一.位操作符
这类操作符可以直接对内存中存储的二进制位进行操作,但前提是,它所操作的对象只能是整型。因为我们知道,整型和浮点型在内存中的存储方式是完全不一样的,如果根据操作整型的方式去操作浮点数,那不得糟糕透顶啊,哈哈哈哈哈。前面的文章中讲到的移位操作符也是位操作符中的一种哦~
⚠:在移位操作中,可千万不要移动负数位,这个是未标准定义的。
(1)& :按位与(只要有0时就为0,只有同时为1时才为1);
(2)/ :按位或(只有同时为0时才为0,其余情况都为1);
(3)^ : 按位异或(对应的二进制位,相同为0,相异为1);
举个简单的例子吧:
二.单目操作符
顾名思义,单目嘛,也就是只接受一个操作数的操作符,我们就当它只有一个眼睛吧,哈哈哈,主要有:
//单目操作符 ! //逻辑反操作 - //取负值 + //取正值 & //取地址 sizeof //操作数的类型长度(以字节为单位) ~ //对一个数的二进制按位取反 -- //前置减减,后置减减 ++ //前置加加,后置加加 * //间接访问操作符(解引用操作符) (类型) //强制类型转换
注:这里的&,*应用于指针;
sizeof 是操作符,不是函数!
举例子说明最直观了哦:
(1) !操作符
(2) &取地址操作符
从上面的例子就可以看到,
int a = 10;
int *pa = &a;
在这个代码中,希望大家能够正确的理解它们的含义哦。
不过,前面的这两行代码也可以写成:
int *pa;
pa = &a;
运行结果也是一样的。只是在后面的这种方式中,pa只是一个定义为int型的指针,pa = &a 它的前面没其他多余的标识,但是在printf("%d\n",*pa) 打印结果的时候,应用了解引用操作符(*)。
pa 虽然说是指针,它的里边存放着a的地址,不过它可把自己没有忘啊,它也有自己的地址,所以,通过对pa的地址进行解引用操作,仍然可以找到a所对应的值哦。
(3)sizeof操作符
sizeof操作符以字节的形式给出了其操作数所占存储空间的大小,操作数可以是一个表达式或者是括在括号内的类型名,操作数所占存储空间的大小由操作数的类型决定,从而返回一个对象或者类型所占的内存字节数。
printf("%d\n", sizeof(a));//可以这样写;
printf("%d\n", sizeof(int)); //可以这样写;
printf("%d\n", sizeof a); //可以这样写;
printf("%d\n", sizeof int);//但不可以这样写;
在这里,添加一个小的知识点吧:
关于sizeof 和 strlen 的区别:
sizeof 是C语言中的一个操作符,用于计算变量或者类型所占内存空间大小;
strlen(string strlen) 是C语言中的一个函数,用于计算字符串的长度,不包括结束符"\0";
在使用strlen函数读取字符串的时候,遇到“\0”时就停止读取,此时,“\0”前面的字符的个数就是字符串的长度,这里,“\0”不算做一个字符。这个‘\0’转义字符在任何一个字符串的结尾都会隐藏一个"\0",是字符串结束的标志。
老规矩,看代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char arr[] = "abcdef";
printf("%d\n", strlen("abcdef"));
printf("%d\n", sizeof("abcdef"));
return 0;
}
运行结果:
(4)前后置++操作符,前后置 - -操作符
前置:先给自己加(减),再使用;
后置:先使用,再给自己加(减);
看例子吧:
(5)~对二进制的操作数取反操作符
比如二进制数为:1001,取反则为:0110
看代码:
三.关系操作符
> >= < <= != (用于测试“不相等”) == (用于测试“相等”)
这些操作符只能应用到适合的类型上,虽然说这些运算符比较简单,但是大家在日常的练习与应用中要注意一些小陷进哦~
还有一个需要大家注意的是:
= 是赋值,==是判断相等;
四.逻辑操作符
(1)逻辑与:&&(并且)
(2)逻辑或:||(或者)
判断某年是不是闰年这个例子,就对这两个操作符简单的运用了
#include<stdio.h>
int main()
{
int year;
printf("请输入年份:");
scanf("%d", &year);
if ((year % 4 == 0 && year % 100) || (year % 400 == 0))
{
printf("是闰年");
}
else
{
printf("不是闰年");
}
return 0;
}
注:
(year % 4 == 0 && year % 100) 和 (year % 400 == 0) 只需满足一个即可;
如果拿这个条件判断的时候,(year % 4 == 0 && year % 100),year % 4 == 0 和 year % 100可得必须都满足哦!!!
五.条件操作符
这个操作符也是三目操作符(有三个操作数)
形式:exp1?exp2:exp3
若条件1成立,条件2为真,则整个表达式的结果就是条件2的结果,否则,就是条件3的结果。
举例子说吧:
六.逗号表达式(用逗号隔开的多个表达式)
逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
举例子吧:
七.下标引用,函数调用和结构成员
(一)下标引用
操作数:一个数组名 + 一个索引值
(二)函数调用
()函数调用操作符接受一个或者多个操作数,第一个操作数是函数名,其余的操作数就是传递给函数的参数。
这里大家要注意哦,对于函数调用操作符来说,最少有1个操作数
(三)结构成员访问操作符
访问一个结构成员的操作符分为:
(1). 格式:结构体.成员名;
(2)-> 格式:结构体指针->成员名
举个例子:
好啦,关于C语言里操作符的介绍终于在本篇文章画上句号了,如果有错误之处,欢迎各位小伙伴们在评论区多多互动吖~