略讲操作符ヾ(●゜ⅴ゜)ノ

今天来了解一下各类操作符

操作符

算数操作符

+        -        *        /        %

/

除法

这是正常运算

 但换成7/2时,打印出的结果竟然是3?

我第一次见到也很困惑  (・-・*)

查过后才知道:由于7和2都是整型,所以打印出来的也是整型3

要想打出3.5,就必须将7换成1.0或将2换成2.0,或者两者都换,还必须将 %d 换成 %lf (打印float类型的数据用 %lf )

 

 但是我们就想只打印3.5怎么办?

在 lf 前面加个 .1 就可以了,这里的 .1 就表示只打印小数点后一位

 %

叫做取模/取余

这里7除2余1,所以结果也是1

 移位操作符

<<  左移操作符

>>  右移操作符

注:移位操作符的操作数只能是整数。

这里的左移右移又是怎么回事呢?

且听我细细道来~

比如创建一个整型 a 

int a = 1;

一个整型 4 byte = 32 bit

将1写进32比特位的空间里,就要写32个二进制位

00000000000000000000000000000001

a 就占据了上述空间,而移位操作符就是将上述二进制序列整体移动

这里涉及二进制的计算和存储,后面会细讲,这里先卖个关子

位操作符

      //按位与

       //按位或

      //按位异或

注:他们的操作数必须是整数。

位:二进制位

赋值操作符

=        +=        -=        *=        /=        &=        ^=        |=        >>=        <<=

= 是赋值操作符

后面的都叫复合操作符

+=、-=、*=、/=

a=a+5;

就可以简化成

a+=5;

后面的同理

单目操作符

                逻辑反操作符

-                   负值

+                  正值

&                  取地址

sizeof           操作数的类型长度(以字节为单位)

~                   对一个数的二进制按位取反

--                   前置、后置--

++                 前置、后置++

*                    间接访问操作符

(类型)            强制类型转换

这里。。。什么叫单目操作符呢?

当我们使用 + 时

2 + 3

+        叫操作符

2        叫左操作数

3        右操作数

所以 + 就叫做双目操作符

只有一个操作数的操作符就是 单目操作数

逻辑反操作

C语言如何表示真假?

0表示假

非0表示真

我们创造一个变量 a 输入并打印

 这里我们输入1,因为1非0,所以正常打印应该是1

而!是逻辑反操作,能把真的变成假的,把假的变成真的,所以最后一行打印的是0;

 我们再次输入 0 ,最后一行因为 ! 打印的是1.

!的应用

我们在使用if语句时

这里插播一下:

if语句是一个条件语句

格式是

if(条件)
{...}

if(条件)

{...}

else

{...}

以及

if(条件)
{...}
else if(条件)
{...}
...
else
{...}

这里不细讲

回到上面

当我们使用if语句时

这里的  if(flag)表示如果flag为真就打印hehe

             if(flag)表示如果flag为假就打印haha

中场休息一下。。

sizeof

操作数的类型长度

这个通常是定值

变量的本质是向内存申请空间,一个内存单元是一个字节

这里的变量 a 就是向内存申请空间

int main()
{
   int a = 10;
   return 0;
}

由于 int 类型所占空间是4个字节,所以10就被储存在下面4个字节

 我们再试着打印 a 所占的空间,发现与上面的 int 类型大小一样

 

 sizeof计算变量大小时变量的括号可以省略,但计算类型是的括号不能省略

 所以证明  sizeof  不是函数操作符

这里第一个 sizeof  计算的是数组arr的总大小

第二个计算的是单个数组的大小

第三个则是数组含有元素的大小

 那么 strlen 和 sizeof 之间究竟有怎样的不同呢?

我们从这段代码入手

#include<stdio.h>
int main()
{
    char arr1[]="abc";
    char arr2[]={ 'a', 'b', 'c' };
    printf("%d\n",strlen(arr1));
    printf("%d\n",strlen(arr2));

    printf("%d\n",sizeof(arr1));
    printf("%d\n",sizeof(arr2));
    return 0;
}

先来看一下打印出来的效果

 析:

第一行计算的是代码的长度,且 \0 不被计入长度,所以结果是3

第二行由于不知道 \0 具体在哪,所以结果是随机值

第三行sizeof只关注占据内存空间的大小 arr1是 a b c \0,所以占据4个字节,打印结果就是4 

第四行中只有 a b c,打印出来的结果就是3

strlen  是库函数

strlen  是求字符串长度的,关注的字符串中是否有 \0 ,统计 \0 之前出席拿的字符个数

sizeof  是操作符

sizeof  只关注占据了多大的内存空间,不关注内存中存放的数据

sizeof  返回值的单位是字节

++、--

++的效果就是+1,--的就是-1

这里的++a的意思是先++,后使用:a+=1,a=11,将a++后的结果赋给b,所以b也等于11

 a++的意思就是先使用,再++。这里a=10,x先赋给b,再++,后变为11

 --同理

(类型)

强制类型转换

这里的3.14是double类型的,运行时会报错

 为了正常运行,又不改变前面的 int 就要对3.14进行强制类型转换

 关系操作符

>

>=

<

<=

!=        用于测试“不相等”

==        用于测试“相等”

逻辑操作符

&&        逻辑与

| |          逻辑或

&& 相当于生活中的并且

||相当于或者

都只关注真和假

下面的代码意思是 如果a与b都是真,那么打印hehe

 条件操作符(也叫三目操作符

exp1 exp2 : exp3

这个操作符的意思是:

如果表达式1为真,那么表达式2算,3不算

如果表达式1为假,那么表达式2不算,3算

应用实例

 逗号表达式

exp1 ,exp2, exp3, ...expN

逗号表达式会从左向右依次计算,但是整个表达式的结果是最后一个表达式的结果

下标引用、函数调用和结构成员

[ ]  下标引用操作符

( )  函数调用操作符

.        结构体.成员名

->       结构体指针->成员名

下标引用是应用在数组里的

这里的意思就是 打印数组里下标为7的数字

红框里的括号就是 函数调用操作符 

 结构体,较为复杂,这里只提一嘴

欧了,今天的内容也完了,东西较多,慢慢消化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值