【初识C语言】操作符

目录

引言

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

!:逻辑反操作

-  :负值

+ :正值

&:取地址(后面讲)

sizeof:操作数的类型长度

~ :对一个数的二进制按位取反(后面讲)

-- :前置、后置--

++ :前置、后置++

* :间接访问操作符(解引用操作符)(后面讲)

(类型):强制类型转换

关系操作符

逻辑操作符

条件操作符(三目操作符)

逗号表达式

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


引言

C语言是非常灵活的:因为C语言提供了非常丰富的操作符,所以使得使用起来就比较灵活。

算术操作符

+        -        *        /        %

#include <stdio.h>
int main()
{
	int a = 4 + 2;//相加
	int b = 4 - 2;//相减
	int c = 4 * 2;//相乘
	int d = 4 / 2;//相除
	int e = 4 % 2;//取模
	printf("%d\n", a);//6
	printf("%d\n", b);//2
	printf("%d\n", c);//8
	printf("%d\n", d);//2
	printf("%d\n", e);//0
	return 0;
}

注意:

  • 除号的两端都是整数的时候,执行的是整数除法,如果两端只要有一个浮点数就执行浮点数的除法
  • 取模操作符的两个操作数只能是整数
#include <stdio.h>
int main()
{
	//取余
	int a = 5 / 2;
	float b = 5.0 / 2;
	printf("%d\n", a);//2
	printf("%.2f\n", b);//2.50	.2f:保留小数点后多少位
	//取模
	int c = 5 % 2;
	printf("%d\n", c);//1
	return 0;
}

移位操作符

>>        <<        (涉及2进制的计算,后面再介绍)

位操作符

&        ^        |        (后面再介绍)

赋值操作符

=        +=     /=   -=        *=       

&=       ^=        |=        >>=        <<=        (下面一组后面再介绍)

//赋值运算符:= += -= *= /= 
#include <stdio.h>
int main()
{
	int a = 0;//初始化
	a = 4;//赋值
	printf("%d\n", a);//4
	a += 2;//a=a+2;
	printf("%d\n", a);//6
	a -= 2;//a=-2;
	printf("%d\n", a);//4
	a *= 2;//a=a*2;
	printf("%d\n", a);//8
	a /= 2;//a=a/2;
	printf("%d\n", a);//4
	return 0;
}

大家可以根据上面的例子进行练习,看a到每个阶段的值等于多少

单目操作符

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

!:逻辑反操作

注:在C语言中,0表示假,非0表示真

//单目操作符:只有一个操作数的操作符
//!:逻辑反操作
//在C语言中,0表示假,非0表示真
#include <stdio.h>
int main()
{
	int flag = 0;
	if (!flag)
	{
		printf("hello\n");
	}
	return 0;
}

读者可以根据上述代码试验一下,当flag=0时,!flag为真,会输出hello,当flag=2时,!flag为假,不会输出值。

-  :负值

//-:负值
#include <stdio.h>
int main()
{
	int a = -2;
	int b = -a;//b=-(-2)
	printf("%d\n", b);//2
	return 0;
}

+ :正值

//+:正值
#include <stdio.h>
int main()
{
	int a = -2;
	int b = +a;//b=a
	printf("%d\n", b);//-2
	return 0;
}

&:取地址(后面讲)

sizeof:操作数的类型长度

(注:sizeof是单目操作符,不是函数,以字节为单位)

//sizeof:操作数的类型长度,以字节为单位
#include <stdio.h>
int main()
{
	int a = 2;
	printf("%d\n", sizeof(a));//4
	printf("%d\n", sizeof(int));//4:sizeof后既可跟变量名,又可跟数据类型
	printf("%d\n", sizeof a);//4:sizeof后跟变量名可把括号省略,但若是数据类型,则不支持省略括号

	int arr[10] = { 0 };
	printf("%d\n", sizeof(arr));//40:计算的是整个数组的大小,数组为整型数组,每个元素占4个字节
	printf("%d\n", sizeof(arr[0]));//4:数组的第一个元素大小
	printf("%d\n", sizeof(arr) / sizeof(arr[0]));//10:数组的元素个数
	return 0;
}

~ :对一个数的二进制按位取反(后面讲)

-- :前置、后置--

//--:前置、后置--
#include <stdio.h>
int main()
{
	int a = 2;
	int b = --a;//先--,后使用 a=a-1;b=a;
	printf("%d\n", b);//1
	int c = 2;
	int d = c--;//先使用,后-- d=c;c=c-1;
	printf("%d\n", d);//2
	return 0;
}

++ :前置、后置++

//++:前置、后置++
#include <stdio.h>
int main()
{
	int a = 2;
	int b = ++a;//先++,后使用 a=a+1;b=a;
	printf("%d\n",b);//3
	int c = 2;
	int d = c++;//先使用,后++ d=a;a=+1;
	printf("%d\n", d);//2
	return 0;
}

* :间接访问操作符(解引用操作符)(后面讲)

(类型):强制类型转换

//(类型):强制类型转换
#include <stdio.h>
int main()
{
	int a = 3.14;//3.14字面浮点数,编译器默认理解为double类型
	int b = (int)3.14;//强制转换为整型
	printf("%d\n", b);//3
	return 0;
}

关系操作符

用于测试“不相等”:>        >=        <        <=        !=

用于测试“相等”:==

(由于判断不相等的操作符都很好理解,所以笔者在这着重强调==的使用)

//关系操作符
//用于判断不相等:> >= < <= !=
//用于判断相等:==
#include <stdio.h>
int main()
{
	int a = 10;
	if (a = 3)
	{
		printf("hello\n");//hello
	}
}
#include <stdio.h>
int main()
{
	int a = 10;
	if (a == 3)
	{
		printf("hello\n");//不会输出值
	}
	return 0;
}

仔细对比上面两个代码的区别,想一想为什么第一个会输出“hello”,而第二个不会输出呢?

解析:因为第一个代码if语句里a=3是赋值,而3为真,则输出“hello”

而第二个代码里a==3才是判断是否相等,不相等为假,则不会输出任何值

逻辑操作符

&&:逻辑与        ||:逻辑或

//&&:逻辑与-并且
//||:逻辑或-或者
#include <stdio.h>
int main()
{
	int a = 2;
	int b = 4;
	if (a && b)
	{
		printf("hello\n");
	}
	return 0;
}

&&:逻辑与,两个都为真才为真,若其中有一个为假,结果就为假,不会输出,读者可将其中一个值改为0试验一下

#include <stdio.h>
int main()
{
	int a = 2;
	int b = 0;
	if (a || b)
	{
		printf("hello\n");
	}
	return 0;
}

||:逻辑或,两个只要有一个为真结果就为真,若两个都为假结果才为假

条件操作符(三目操作符)

exp1 ? exp2 :exp3        (有三个操作数)

//条件操作符(三目操作符):有三个操作数
#include <stdio.h>
int main()
{
	int a = 2;
	int b = 4;
	int r = (a > b ? a : b);//判断ab大小
	//a>b吗?大于结果就是a,小于结果就是b
	printf("%d\n", r);//4
	return 0;
}

逗号表达式

//逗号表达式:exp1,exp2,exp3,....expN
//逗号表达式就是逗号隔开的一串表达式
//逗号表达式的特点:从左向右以此计算,整个表达式的结果是最后一个表达式的结果
#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = 0;
	int d = (c = a + 2, a = b + c, c - 3);//c=12,a=32,c=9
	printf("%d\n", d);//9
	return 0;
}

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

[ ]        ()        .        ->

//下表引用操作符
#include <stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int n = 3;//数组下标引用可以定义变量
	arr[n] = 20;//[]就是下标引用操作符,arr和3就是[]的操作数

	return 0;
}
//函数调用操作符
#include <stdio.h>
int Add(int x, int y)
{
	return x + y;
}

int main()
{
	int sum = Add(2 , 4);//()就是函数调用操作符,Add,2,3都是()的操作数
	printf("%d\n",sum);
	return 0;
}

.        -> (后面讲)

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值