C语言第四课

本文介绍了C语言中的各种操作符,包括算术、移位、位、赋值、单目、关系、逻辑、条件和逗号操作符。详细讲解了它们的用法和实例,如取余、位移、按位与、按位异或、赋值组合以及逻辑短路等,并提到了一些注意事项,如取余操作数必须为整数,数组定义时下标需为常量等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

  1. 操作符
    1.1 算数操作符
    1.2移位操作符
    1.3位操作符
    1.4赋值操作符
    1.5单目操作符
    1.6关系操作符
    1.7逻辑操作符
    1.8条件操作符
    1.9逗号表达式
    1.10逗号表达式
  2. 总结

一、操作符

操作符的定义 简单来说操作符就是告诉编译程序执行特定数学运算,逻辑运算,位运算的符号

操作符又分为很多种:

1.1算术操作符

+(加) -(减) *(乘) /(除) %(取余)

C语言中,算术运算符“%”代表模(取余)运算即在这里插入图片描述
5除与2,商2余1。因为%是取余,故输出结果是1。需要注意的是取余操作符两端的的操作数(如例子中的5和2分别是%的左操作数和右操作数)必须是整数。如果其中一个或者两个都是浮点数时候无法执行。例如:在这里插入图片描述

运用/(除号)时候需要注意的是两端都是整数的时候,执行的是整数除法。即
在这里插入图片描述
当两端中有一个或者两个都是浮点数时候,才进行浮点数的除法。即
在这里插入图片描述

1.2移位操作符

>>(右移)  <<(左移)

<<(左移)就是把一个数的所有位都向左移动若干位。例如

int x=16;
printf("%d\n",x<<1);

先将x转成二进制 10000, 往最后再读取一位(0, 或根据是否已经有移位), 输出 100000, 即为32;
左移,若移动位数K等于或大于数据长度N,通常只移动K mod N 位数(mod函数是一个求余函数,所以一个数mod n,是指这个数除以n后取的余数。)故左移一位相当于数值乘以2
(右移)就是把一个数的所有位都向右移动若干位。例如

int x=16;
printf("%d\n",x>>1);

先将x转成二进制 10000, 不读最后一位, 输出 1000, 即为8;
右移一位相当于数值除以2
在这里插入图片描述

1.3位操作符

&(按位与)   ^(按位异或)   |(按位或)

c语言&符号有三种含义:

1、&符号是指取地址符,是单目运算符。
当你定义一个变量a,那想知道变量在内存中的地址,就可以使用这个符号。这个符号就是指取址,在C语言指针这一章中非常常用。
2、&符号是位运算符,表示“按位与”,是双目运算符。
&符号还可以表示“按位与”。在计算地址的时候,都是二进制数了,如果两个操作数该位上的值均为1,那结果计算的位置上结果就是1,否则结果就是为0。
3、当两个&符号同时使用,即&&符号,代表逻辑运算中的逻辑与。
&&符号可以代表逻辑运算中的逻辑与。在“与或非”中,&就是指两个比较的对象,如果一真一假,那结果就是0,如果两个比较都是真,那就是1,如果两个都是假的,那结果就是0。

C语言中,0代表假,非0代表真。
在这里插入图片描述
在这里插入图片描述

1 & 1 = 1, 1 | 1 = 1, 1 ^ 1 = 0

1 & 0 = 0, 1 | 0 = 1, 1 ^ 0 = 1

0 & 1 = 0, 0 | 1 = 1, 0 ^ 1 = 1

0 & 0 = 0, 0 | 0 = 0, 0 ^ 0 = 0

在c语言中^的意思是按位异或。主要用在二进制中。先将两个整数化成二进制位数。

9^5=000010001^00000101=00001100.//结果是12
#include<stdio.h>
int main()
{
   int a=9;
   int b=5;
   printf("%d\n",a^b);
   return 0;
}

在这里插入图片描述

在每个对应的位数中,只有两者的该位上一个是1或者0,而另一个的该位上必须是相反的,那么该运算该位的结果就是1。否则结果就是0。
位操作符都是有关于二进制,目前小沐还没有学到二进制,故无法解释,这些以后详细回答。
在这里插入图片描述

1.4赋值操作符

= += -= *= /= &= ^= |= >>= <<=
int a=0;//初始化
 a=20;//赋值
 a=a+3;//可以写成a+=3//此时a=23
 a=a-3;//可以写成a-=3//此时a=17
 //以此类推,就可以大概了解赋值操作符的用法和定义

在这里插入图片描述
这些以后都会详细解释。

1.5单目操作符

单目操作符简单来说就是只有一个操作数的操作符。例如a+b中的+有两个操作数,是双目操作符。

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

表示逻辑非,是逻辑运算符,运算对象是真或假。

若表示a不等于0,就写成a!=0;假设a等于1,那a!=0;就是真的,true。

简单来说就是把真变成假,把假变成真。C语言中0表示假,非0表示真。
在这里插入图片描述
在这里插入图片描述
-(负值),+(正值)
在这里插入图片描述
sizeof也是操作符,是单目操作符,操作符对于变量可以去除括号,对于类型不可以,函数对于变量和类型都不可以。
在这里插入图片描述
在这里插入图片描述

int arr[10]={1};//因为1只占一个位置,剩余的9个位置默认为0
printf("%d\n",sizeof[0]);//结果是4个字节大小
printf("%d\n",sizeof(arr)/sizeof(arr[0]));//10--数组的元素个数

后置++

int a=10;
int b=a++;//后置++,先把a的值赋值给b,再a=a+1
printf("%d\n",b);//10
printf("%d\n",a);//11

在这里插入图片描述
前置++

int a=10;
int b=++a;//前置++,先a=a+1,后b=a
printf("%d\n",b);//11
printf("%d\n",a);//11

在这里插入图片描述
那么后置–和前置–和后置++和前置++用法一样,只是一个是-一个是+,可以自行验证。
(类型)–强制类型转换

int a=3.14;//这是错误的
//3.14字面浮点数,编译器默认理解为double类型
int a=(int)3.14printf("%d\n",a);//打印3

在这里插入图片描述

1.6关系操作符

>     大于
>=   大于或者等于
<    小于
<=   小于或者等于
!=   用于测试“不相等”
==   用于测试“相等”

在这里插入图片描述
在这里插入图片描述
这些以后详细讲解。

1.7逻辑操作符

&&  逻辑与
||  逻辑或
#include<stdio.h>
int main()
{
   int a=10;
   int b=20;
   if(a&&b)
   {
   printf("给个赞吧!\n”);
   }
   return 0;
}//此时能打印出  给个赞吧!//因为a和b都为真(非0)

&&是当两个条件中都为真时候才为真,其他情况都为假;
||是当两个条件中至少有一个为真便为真,仅当两个条件都为假时候才为假。

#include<stdio.h>
int main()
{
   int a=0;
   int b=20;
   if(a||b)
   {
      printf("给个赞吧!\n"); 
   }
   return 0;
}//可以打印出 给个赞吧!//因为a和b中有一个为真

1.8条件操作符

条件操作符又称为三目操作符,即有三个操作数。

exp1 ? exp2 : exp3

例如在这里插入图片描述

1.9逗号表达式

exp1, exp2,exp3,..expN

逗号表达式就是逗号隔开的一串表达式,逗号表达式的结果是最后的一个表达式的结果。例如:
在这里插入图片描述

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

[]    ()   .   ->
#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个数组时候arr[]的[]必须是常量
	//arr[3]=20//[]就是下标引用操作符,arr和3就是[]的操作数
	//a+b,a是+的左操作符,b是+的右操作符
	int n = 3;
	arr[n] = 20;//访问元素时候可以用变量
	return 0;
}
 #include<stdio.h>
   int x, y;
  int Add(intx, inty)
  {
	return x + y;
  }
int main()
{
	int sum = Add(2, 3);//()就是函数调用操作符,Add,2,3都是操作符
	printf("%d\n", sum);
	return 0;
}

以后会详细讲解。

2.总结

没想到码一个操作符真不容易,今天学到了很多知识点,包括了很多易错点,比如在创建一个数组时候arr[]必须是常量,%(取余)的两个操作数必须是整数等等。那么今天笔记就到这里了。下一期见了!在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐曦希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值