初识C语言--第二弹(二)

简介: 初识C语言--第二弹(二)

10.1.2:%操作符:

%操作符的两端都必须是整数。

e8c0f03fcc564b76b97926eb3dfa4652.png

通过上面的代码我们可以看出来10%3的结果是1,其实就是10除以3的余数。


10.2:移位操作符

移位操作符
>> <<

10.3:位操作符

位操作符
& ^

还有这个 | 符号。(表格里打不进去)

10.4:赋值操作符

赋值操作符
= += -= *= /= &= ^= >>= <<=
#include <stdio.h>
int main()
{
  int a = 0;//这叫初始化
  a = 20;//这叫赋值
  return 0;
}

+=、-=、*=、/=、&=、^=。a=a+1就可以写成a+=1后面几个同理。

10.5:单目操作符

单目的意思是只有一个操作数。

  • !逻辑反操作符
  • 正值 +
  • 负值 -
  • & 取地址
  • sizeof 操作数的类型长度(以字节为单位)
  • ~ 对一个数的二进制按位取反
  • 前置、后置- -
  • 前置、后置++
  • 间接访问操作符(解引用操作符) *
  • (类型) 强制类型转换

10.5.1:!逻辑反操作符

要弄清!逻辑反操作符,那么我们首先要知道在C语言中规定用0来表示假,非0表示真。

f6e212c61b8b47df9f6e904e15808bb4.png

如上图,我们定义了一个a等于5,按照上面介绍的非0为真,那此时a就代表真,if语句的执行条件就是当if后面括号里的表达式为真就执行if下面的语句,这里我们成功打印出了“hehe”,那么我们把代码稍作修改,在a前面加一个!会发生什么结果呢?

3f0dcc0011294b2ba303874baaf1902b.png

此时我们在a的前面加了一个!,由于!是逻辑反操作符,本来a=5(非0)为真,加上!后!a就表示假了,这也就导致程序没有执行if下面的语句,转而执行else下面的语句了。可见!可以把假的变成真,真的变成假。

10.5.2:正值 +和负值 -


be7c4ddb6793474f8fc212229775dd92.png

看上面这段代码,我们先定义了一个a等于10,然后定义了一个b等于-a,此时打印出的b为-10,可见 - 号有取相反数的作用。那 + 号呢?如果我们让a等于 -10,再让b等于+a,此时b是多少呢?


4659f24472ce49c8bfd4efc03dc7b033.png

可见此时b等于-10和a的值一样,没有什么变化,所以我们一般用不上 + 。

10.5.3:sizeof与strlen的区别

sizeof是一个操作符,用来计算变量或者类型所占用的内存空间大小,单位为字节


438f85448a404f07b4dcadb32e189bb5.png

上面我们计算出变量a和b的大小都是4个字节。还可以把sizeof里面的a和b改成其对应的类型int和float其结果是一样的。

而strlen是库函数,是计算字符串的长度的,统计的是字符串中’\0’之前出现的字符个数,仅仅使用字符串。

10.5.4:前置、后置- -和前置、后置++

这里我们以前置、后置+ +为例来给大家说明。

10.5.4.1:前置++

6c114b89715449e1816737f119c009fa.png


通过结果可以看出a和b都是6,就说明这里的++a执行了两步操作,先让a加了1,然后把a+1后的结果也就是6赋值给了b,简单来说,++a是先对a进行++,然后再使用。

上图代码就等同于下面这段代码:

#include <stdio.h>
int main()
{
  int a = 5;
  //int b = ++a;
  a = a + 1;
  int b = a;
  printf("a=%d b=%d", a, b);
  return 0;
}

10.5.4.2:后置++


eac3de2bde3d4928879086704514bc8d.png

通过运行结果可以看出,此时a为6,b为5。可见a++也执行了两个操作,他先是把a本来的值也就是5赋值给了b,然后再让a=a+1,简单来说,a++就是先使用a的值,然后再++。

上图的代码就等同于下面这段代码:

#include <stdio.h>
int main()
{
  int a = 5;
  //int b = a++;
  int b = a;
  a = a + 1;
  printf("a=%d b=%d", a, b);
  return 0;
}

通过上面的例子不难看出,不管是a++还是++a都是执行了两步操作,不同点在于a++是把a最初的值赋给了另一个变量,而++a则是把a+1后的值赋给了另一个变量,而它俩的共同点是a最终的值都是+1后的结果。

10.5.5:(类型) 强制类型转换

看下图代码,我们声明了一个整型变量a,同时给他初始化成3.14,3.14是浮点数,把它赋给a那岂不是牛头不对马嘴,这时编译器就会报警:

c2f6d3988157484a898e9182754515ef.png


此时就可以用强制类型转换来消除警报,我们在3.14的前面加上(int),此时一个float型数据就被我们强制转换成了int型,代码没有报错也没有警告。

f520278a84a848369642fc6236936472.png

需要注意的是:将一个float型数据或者double型数据转换成int型数据只取整数部分。

10.6:关系操作符

关系操作符
> < >= <= != ==

其中!=是用来测试“不相等”,==是用来测试“相等”尤其是判断相等时一定要用两个等号。下面代码判断a是否等于5,如果a等于5则输出haha。

1e596d9e1fa741e69273cabcba42116f.png

那如果我们不小心漏掉一个=呢?结果就变成下面这样:

421df0c1a52245e88117a36e68e64127.png

因为漏了一个=,此时a=5就是一条赋值表达式,此时a变成5,只要if后面括号里为真就会执行if下面的语句,这里a=5,非0所以为真,最终打印出haha,但这显然与我们的意图不符。而且聪明的电脑也给我们提醒了应该用 ==。

10.7:逻辑操作符

  • && 逻辑与
  • | | 逻辑或

逻辑与就是我们日常生活中的“并且”,逻辑或就是我们日常生活中的“或者”,对于这两个操作符我们只关注真假。

a b a&&b a逻辑与b

可见只有当a和b同时为真,a&&b才为真,a和b同时为假a||b才为假。

0b192fdb7f754b0e8d2c3448cbaa4fbb.png因为a=3为真,b=5为真,此时a&&b就为真,就会在屏幕上打印hehe。

9aa71519ada046c9a18d7aa414feee60.png

此时a=0为假,所以a&&b为假,不输出hehe。

再举个栗子:当年龄在18–36岁,输出青年,18~36岁用逻辑表达式表示出来就是:age大于等于18同时age小于等于36,age>=18&&age<=36,下面用代码来实现:


fefc662597cb4bf2908cf0776a9246a3.png

注意:这里千万不能写成:18<=age<=36。因为如果当age等于2时,这个表达式从左往右执行,先是判断 18<=2 ,该表达式不成立也就是假,假就是0,此时18<=2变成0,接着判断0<=36,该表达式成立也就是真,真就是1,0<=36变成1,因此整个表达式18<=2<=36最后变成1,1就是真,但实际上2怎么可能大于18呢。大家可以看具体的代码执行结果:

e1217522dbb1421f8210e88724069bb2.png

10.8:条件操作符:

  • exp1 ? exp2 : exp3
    注:其中exp为表达式的意思。
    条件操作符的意思就是,如果exp1为真则返回exp2,为假则返回exp3。

下面代码执行的是一个输出较大数的操作:如果a>b则返回a,

0a40dc78e90948f98a1840b0f960a17d.png

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

下标引用、函数调用和结构成员
[ ] () . ->

今天就分享到这里啦,喜欢的话可以点赞、评论和收藏哟!

9bb9b47d94fa4cd88a3b8ef4d490e97d.jpg


目录
相关文章
|
7月前
|
Unix 编译器 程序员
C语言第一弹---C语言基本概念(上)
C语言第一弹---C语言基本概念(上)
|
7月前
|
程序员 编译器 C语言
C语言第二弹---C语言基本概念(下)
C语言第二弹---C语言基本概念(下)
|
7月前
|
存储 编译器 程序员
C语言第十六弹---操作符(下)
C语言第十六弹---操作符(下)
|
7月前
|
机器学习/深度学习 C语言
C语言第七弹---循环语句
C语言第七弹---循环语句
C语言第七弹---循环语句
|
存储 C语言
初识C语言--第二弹(一)
初识C语言--第二弹(一)
63 0
|
7月前
|
程序员 编译器 Serverless
C语言第十弹---函数(上)
C语言第十弹---函数(上)
|
7月前
|
存储 C语言 C++
C语言第十五弹---操作符(上)
C语言第十五弹---操作符(上)
|
7月前
|
C语言
C语言第二十二弹---指针(六)
C语言第二十二弹---指针(六)
|
7月前
|
存储 编译器 C语言
C语言第十七弹---指针(一)
C语言第十七弹---指针(一)
|
7月前
|
编译器 C语言
C语言第十九弹---指针(三)
C语言第十九弹---指针(三)