再学C语言15:其他运算符

C大约有40个运算符

一、sizeof运算符和size_t运算符

sizeof运算符:以字节为单位返回其操作数大小;操作数可以是一个具体的数据对象(如一个变量名)或者一个类型(如float);如果数据对象是一个类型,必须被括在圆括号中

C有一个typedef机制,允许为一个已有的类型创建一个别名

size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数,C的头文件系统可以使用typedef使size_t在系统中作为unsigned int或unsigned long的同义词

二、取模运算符(modulus operation):%

功能:用于整数运算,计算其右边的整数除其左边的整数得到的余数

对浮点数使用取模运算符是无效的

负数取模(C99标准):如果第一个操作数为负数,得到的模为负数;如果第一个操作数为整数,得到的模为正数

三、增量和减量运算符:++和--

1. 增量运算

增量运算符:将其操作数的值增加1

两种方式:前缀(运算符出现在操作数之前)和后缀(运算符出现在操作数之后);两种方式的区别在于值的增加这一地址发生的时间不同

示例代码:

#include <stdio.h>
int main(void)
{
    int a = 0;
    int b = 0;
    int c, d;

    c = a++;
    d = ++b;

    printf("The value of c is %d \n", c);
    printf("The value of d is %d \n", d);

    return 0;

}

运行结果:

4d209a2c7d2f4a0c850d8291eebf738a.png

实际中要慎重选择前缀或后缀,因为得到的结果可能不同

b = ++i; // 如果使用i++会有不同结果
//可以使用下面的代码进行替代:
++i;
b = i; // 上一行使用++i或i++均不会影响计算结果

增量运算和减量运算可以帮助精简代码,让程序看起来更简洁,有助于产生更高效的机器代码;缺点是可能会让代码变得难以理解

2. 减量运算

每种形式的增量运算符都有一种形式的减量运算符与之对应(即前缀和后缀两种形式)

3. 增量和减量运算符的优先级

增量和减量运算符具有很好的结合优先级,只有圆括号比它们的优先级高

增量运算符和减量运算符只能影响一个变量

4. 注意事项

为了防止出错,不要一次使用太多的增量运算符

C中,编译器可以选择先计算函数中哪个参数的值,这个自由提高了编译器的效率,但是如果在函数参数中使用了增量运算符就会有麻烦,如:

printf("%10f %10d\n", num, num*num++);

又如:

res = num / 2 + 5 * (1 + num++);

编译器有可能不会按照程序员所希望的顺序进行具体的操作,结果是不确定的,C标准没有定义结果将会是什么,使用不同的编译器可能会出现不同的结果

两个基本的原则可以避免此问题

1)如果一个变量出现在同一个函数的多个参数中时,不要将增量运算符和减量预算符用于其上面

2)当一个变量多次出现在一个表达式中时,不要将增量运算符和减量运算符用于其上面

本质上还是编程习惯的问题,养成规范的习惯,可以在很多地方少犯不必要的错误

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Forster-C

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

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

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

打赏作者

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

抵扣说明:

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

余额充值