C语言学习【运算符优先级】

C语言学习【运算符优先级】

butter = 25.0 + 60.0 * n / SCALE;

上述代码的运算顺序是(一般是从左到右)

60.0 * n       首先计算表达式中的*或/(假设n的值为6)
360.0 / SCALE  然后计算表达式中第2个*或/
25.0 + 180     最后计算表达式里第1个+或-

下图为运算符优先级(从低至高)

优先级和求值顺序

/* 优先级测试 */

#include "stdio.h"

int main(void)
{
    int top, score;

    top = score = -(2+5) * 6 + (4 + 3 * (2+3));

    printf("top = %d, score = %d\n", top, score);

    return 0;
}

程序运行结果

top = -23, score = -23

sizeof运算符和size_t类型

sizeof运算符以字节为单位返回运算对象的大小;
1字节定义为char类型占用的空间大小

/* 使用sizeof运算符 */
// 使用 C99 新增的%zd 转换说明 -- 如果编译器不支持%zd,请将其改成%u 或%lu

#include "stdio.h"

int main(void)
{
    int n = 0;
    size_t intsize;

    intsize = sizeof(int);
    printf("n = %d, n has %zd bytes; all ints have %zd bytes.\n",
    n, sizeof n, intsize);
}

程序运行结果

n = 0, n has 4 bytes; all ints have 4 bytes.

求模运算符:%

求模运算符(modulus operator)用于整数运算,求模运算符给出其左侧整数除以右侧整数的余数(remainder),求模运算符只能用于整数,不能用于浮点数

/* 把秒数转换成分和秒 */
#include "stdio.h"

#define SEC_PER_MIN 60        /* 1分钟 = 60秒 */

int main(void)
{
    int sec, min, left;

    printf("Convert seconds to mintes and seconds!\n");
    printf("Enter next value (<= 0 to quit): \n");
    scanf("%d", &sec);

    while(sec > 0)
    {
        min = sec / SEC_PER_MIN;       /* 截断分钟数 */
        left = sec % SEC_PER_MIN;      /* 剩下的秒数 */
        printf("%d seconds is %d minutes, %d seconds.\n", sec, min, left);
        printf("Enter next value(<= 0 to quit): \n");
        scanf("%d", &sec);
        
    }
    printf("Done!\n");

    return 0;
}

程序运行结果

120 seconds is 2 minutes, 0 seconds.
Enter next value(<= 0 to quit):
150
150 seconds is 2 minutes, 30 seconds.
Enter next value(<= 0 to quit):
-1
Done!

递增运算符:++

递增运算符(increment operator)执行简单的任务,将其运算对象递增1.
前缀模式:++出现在其作用的变量前面,这是前缀模式;
后缀模式:++出现在其作用的变量后面,这是后缀模式.

/* 递增:前缀和后缀 */

#include "stdio.h"

int main(void)
{
    int ultra = 0, super = 0;
    while(super < 5)
    {
        super++;
        ++ultra;
        printf("super = %d, ultra = %d\n", super, ultra);

    }
    return 0;
}


程序运行结果

super = 1, ultra = 1
super = 2, ultra = 2
super = 3, ultra = 3
super = 4, ultra = 4
super = 5, ultra = 5
++i与i++的区别
/* 前缀和后缀 */

#include "stdio.h"

int main(void)
{
    int a = 1, b = 1;
    int a_post, pre_b;

    a_post = a++;             /* 后缀递增 */
    pre_b = ++b;              /* 前缀递增 */
    printf("a a_post b     pre_b \n");
    printf("%1d %5d %5d %5d\n", a, a_post, b, pre_b);

    return 0;
}

程序运行结果

a a_post b     pre_b 
2     1     2     2

ab都递增了1,但是,a_posta递增之前的值,而b_preb递增之后的值,这就是++的前缀形式和后缀形式的区别.

前缀形式

q = 2*++a;       /* 首先, a递增1;然后2乘以a,并将结果赋值给q */
q = 2*a++;       /* 首先,2乘以a,并将结果赋给q;然后,a递增1 */
a_post = a++;    /* 后缀:使用a的值之后,递增a */
b_pre = ++b;     /* 前缀:使用b的值之前,递增b */

单独使用递增运算符时,使用那种形式都没有关系

递减运算符:–

每种形式的递增运算符都有一个递减运算符(decrement operator)与之对应,用--代替++即可.

--count;          /* 前缀形式的递减运算符 */
count--;          /* 后缀形式的递减运算符 */

优先级

递增运算符和递减运算符都有很高的结合优先级,只有圆括号的优先级比它们高。
x*y++表示的是(x)*(y++)
如果n++是表达式的一部分,可将其视为“先使用n,再递增”;而++n则表示“先递增n,再使用”。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值