运算符简介

本文详细介绍了C语言中的基本运算符(=, +, -, *, /)及其特点,涵盖了赋值、数据对象、左值与右值的概念,以及加减乘除运算符、优先级和结合律。此外,还提及了sizeof、求模、递增/递减运算符和一些特殊运算符的使用。
摘要由CSDN通过智能技术生成

运算符

C语言为处理数据提供了大量的操作,可以在程序中进行算术运算,比较值的大小,修改变量,逻辑的组合关系等。

基本运算符

基本运算的运算符有:=, +, -, *, /(C没有指数运算符。不过C的标准库中提供了一个pow()函数用于指数运算。例如:pow(3, 4)返回3的4次幂)。

赋值运算符:=

在C语言中, “=”并不意味着相等,而是赋值。
months = 12;
意为把值12赋给months这个变量。
在C语言中,12 = months;这样的语句没有意义。 因为12被称为右值(rvalue),只能是字面常量,不能给常量赋值,常量本身就是它的值。概括地说,C使用可修改的左值(modifiable lvalue)标记那些可赋值的实体。

几个术语:数据对象,左值,右值和运算符

赋值表达式语句的目的是把值存储到内存位置上。用于存储值的数据存储区统称为数据对象(data object)。对象指的是实际的数据存储,而左值是用于标识或定位存储位置的标签。
对于早期的C语言,提到左值意为着:
1.它指定一个对象,可以引用内存中的地址;
2.它可用在赋值运算符的左侧。
之后由于const的存在,C标准新增了一个术语:可修改的左值,用于标识可修改的对象。
右值指的是能赋值给可修改的左值的量,且本身不是左值。

在学习名称时,被称为项的就是运算对象。运算对象是运算符操作的对象。

加法运算符:+

加法运算符用于加法运算,使其两侧的值相加。
相加的值(运算对象)可以是变量,也可以是常量。

减法运算符:-

减法运算符用于减法运算,使其左侧的数减去右侧的数。例如:
i = 13 - 2;
+ 和 -运算符都被称为二元运算符,即这些运算符需要两个运算对象才能完成。

符号运算符:-和+

减号还可用于标明或改变一个值的代数符号。例如:
rocky = -12;
smokey = -rocky;
以这种方式使用的负号被称为一元运算符,即只需要一个运算对象。

乘法运算符:*

例:cm = 2.54 * inch;

除法运算符:/

/左侧的值是被除数,右侧的值是除数。整数除法和浮点数除法不同。浮点数除法的结果是浮点数,而整数除法结果是整数。整数除法结果的小数部分被丢弃,这一过程被称为截断。

#include<stdio.h>
int main(void)
{
	printf("5 / 3 = %d\n", 5 / 3);
	printf("6 / 3 = %d\n", 6 / 3);
	printf("5. / 3 = %1.2f\n", 5. / 3);
	printf("5. / 3. = %1.2f\n", 5. / 3.);
	
	return 0;
}

运行结果
在这里插入图片描述

运算符优先级

优先级(从高到低)

运算符结合律
()从左往右
+ - (一元)从右往左
* /从左往右
+ -(二元)从左往右
=从右往左

其他运算符

C语言大约有40个运算符,介绍4个常用的.

sizeof运算符和size_t类型

sizeof运算符以字节为单位返回运算对象的大小。
运算对象可以是具体的数据对象或类型。如果运算对象是类型(如 int),则必须用圆括号将其括起来。

求模运算符

求模运算符用于整数运算。求模运算符给出其左侧整数除以右侧整数的余数。如,13 % 5 得3。
标准规定:无论任何情况,只要a 和b 都是整数值,便可通过
a - (a / b) * b来计算a % b。

递增运算符:++

递增运算符执行简单的任务:将其运算对象递增1,该运算符一两种形式出现。
前缀模式:++count;
后缀模式:count++;
两种模式区别在于递增行为发生的时间不同。
例如:

#include<stdio.h>
int main(void)
{
	int a = 1, b = 1;
	int pre_a = 0, b_post = 0;

	pre_a = ++a;	//前缀模式
	b_post = b++;	//后缀模式
	printf("   a   b   pre_a   b_post\n");
	printf("%4d%4d %4d   %4d\n", a, b, pre_a, b_post);
	return 0;
}

运行结果
在这里插入图片描述

#include<stdio.h>
int main(void)
{
	int ar[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = ar;
	int* s = ar;
	
	printf("*p++   *++s\n");
	printf("%4d %6d\n", *p++, *++s);

	return 0;
}

运行结果
在这里插入图片描述

递减运算符: –

每种形式的递增运算符都有一个递减运算符与之对应,即:
前缀模式:–count;
后缀模式:count–;

优先级

递增运算符和递减运算符都有很高的结合优先级,只有圆括号的优先级比他们高。因此:x * y++表示(x) (y++)。而不是(xy)++。
不过后者无效,因为递增和递减运算符只能影响一个变量(即只能影响一个可修改的左值),而组合x*y不是可修改的左值。

小结

C通过运算符提供多种操作。每个运算符的特性包括运算对象的数量,优先级和结合律。当两个运算符共享一个运算对象时,优先级和结合律决定了先进行哪项运算。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_索伦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值