您现在的位置是:首页 >技术杂谈 >C语言-【操作符二】网站首页技术杂谈

C语言-【操作符二】

山野与梧 2024-06-17 10:19:21
简介C语言-【操作符二】

          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 ",*pa) 打印结果的时候,应用了解引用操作符(*)。

pa 虽然说是指针,它的里边存放着a的地址,不过它可把自己没有忘啊,它也有自己的地址,所以,通过对pa的地址进行解引用操作,仍然可以找到a所对应的值哦。

 (3)sizeof操作符

    sizeof操作符以字节的形式给出了其操作数所占存储空间的大小,操作数可以是一个表达式或者是括在括号内的类型名,操作数所占存储空间的大小由操作数的类型决定,从而返回一个对象或者类型所占的内存字节数。

    printf("%d ", sizeof(a));//可以这样写;
    printf("%d ", sizeof(int)); //可以这样写;
    printf("%d ", sizeof a); //可以这样写;
    printf("%d ", sizeof int);//但不可以这样写;

在这里,添加一个小的知识点吧:

关于sizeof 和 strlen 的区别: 

sizeof 是C语言中的一个操作符,用于计算变量或者类型所占内存空间大小;

strlen(string strlen) 是C语言中的一个函数,用于计算字符串的长度,不包括结束符"";

      在使用strlen函数读取字符串的时候,遇到“”时就停止读取,此时,“”前面的字符的个数就是字符串的长度,这里,“”不算做一个字符。这个‘’转义字符在任何一个字符串的结尾都会隐藏一个"",是字符串结束的标志。

老规矩,看代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	char arr[] = "abcdef";
	printf("%d
", strlen("abcdef"));
	printf("%d
", 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语言里操作符的介绍终于在本篇文章画上句号了,如果有错误之处,欢迎各位小伙伴们在评论区多多互动吖~

 

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。