六.操作符详解(2)

5. 赋值操作符

赋值操作符,它可以让你更改你之前不满意的值,也就是你可以给自己重新赋值

int weight = 120;//体重
weight = 89;//不满意就赋值
double salary = 10000.0;
salary = 20000.0;//使用赋值操作符赋值

赋值操作符是可以连续赋值的,如

int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值

但是这样代码的可读性就不太好,可以改成

x = y+1;
a = x;

复合赋值符

+=

-=

*=

/=

%=

>>=

<<=

&=

|=

^=

int x = 10;
x = x+10;
x += 10;//复合赋值
//其他运算符一样的道理。这样写更加简洁

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

6.单目操作符

! 逻辑反操作

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反

-- 前置、后置--

++ 前置、后置++

* 间接访问操作符(解引用操作符)

(类型) 强制类型转换

-- -- -- -- -- -- -- -- -- --

使用sizeof去计算大小

#include <stdio.h>
int main()
{
    int a = -10;
    int* p = NULL;//不初始化就置为空指针(NULL)
    printf("%d\n", !2);
    printf("%d\n", !0);
    a = -a;
    p = &a;
    printf("%d\n", sizeof(a));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof a);
    //printf("%d\n", sizeof int);//这个写法是错的
    return 0;
}

运行结果:

0

1

4

4

4

-- -- -- -- -- -- -- -- -- --

sizeof 和 数组

#include <stdio.h>
void test1(int arr[])
{
    printf("%d\n", sizeof(arr));
}
void test2(char ch[])
{
    printf("%d\n", sizeof(ch));
}
int main()
{
    int arr[10] = { 0 };
    char ch[10] = { 0 };
    printf("%d\n", sizeof(arr));
    printf("%d\n", sizeof(ch));
    test1(arr);
    test2(ch);
    return 0;
}

运行结果:

40

10

8

8

-- -- -- -- -- -- -- -- -- --

++和--运算符

前置++和--

int main()
{
    int a = 10;
    int x = ++a;
    //先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11
    int y = --a;
    //先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10;
    return 0;
}

-- -- -- -- -- --

后置++和--

int main()
{
    int a = 10;
    int x = a++;
    //先对a先使用,再增加,这样x的值是10;之后a变成11;
    int y = a--;
    //先对a先使用,再自减,这样y的值是11;之后a变成10;
    return 0;
}

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

7. 关系操作符

>

>=

<

<=

!= 用于测试“不相等”

== 用于测试“相等”

  • 要注意一个等号=是赋值,两个等号才是相等==

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

8. 逻辑操作符

&& 逻辑与

|| 逻辑或

区分逻辑与和按位与、区分逻辑或和按位或

1&2----->0

1&&2---->1

1|2----->3

1||2---->1

来一道例题

#include <stdio.h>
int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    i = a++ && ++b && d++;
    printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
    return 0;
}

运行结果:

a = 1

b = 2

c = 3

d = 4

为什么只有a++了一次而其他的没变,是因为a++是后置++,先使用再++。首先a=0,逻辑判断为假,只要有一个假后面的都不判断了,然后a++变成1,而后面的b和d都是不判断的

同理,那下面代码结构是什么呢

#include <stdio.h>
int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    i = a++ || ++b || d++;
    printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
    return 0;
}

运行结果:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

9. 条件操作符

exp1 ? exp2 : exp3

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

运行结果:2

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

10. 逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式
    printf("%d\n", c);
    return 0;
}

运行结果:13

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

①作者的编译器当前是64为平台的,所以指针大小是8,如果算出结果为4也是正确的(32位平台)

运行结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

世长老

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

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

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

打赏作者

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

抵扣说明:

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

余额充值