C不会断句?【前后置,位,移位操作符详解】 b = ++c, c++, ++a, a++

本文详细解析了C语言中的位操作符,包括前缀增量、后缀增量的执行顺序,以及移位操作符的使用。通过具体代码示例解释了断句的重要性,并探讨了右移操作符的不同类型。同时,介绍了原反补规则和补码转换为原码的方法。文章强调了逻辑清晰对于理解和编写代码的重要性,并鼓励初学者克服困难,持之以恒。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍:首先明确基础知识

b=a++   把a赋给b  然后a+1

c=--a     先a-1     然后把结果赋给a和c

逗号表达式的优先级较低,从左往右算

整数的原反补相同

内存中存储的都是二进制的补码,单位是比特,一个int整型也就是4字节,32比特位

直接按照数字写的  打印的  都是原码

&  按位与(二进制位

|  按位或

^按位异或

目录

1.断句

2.移位操作符

3.位操作符


1.断句

int main()
{
	int a, b, c;
	a = 5;
	c = ++a;
	b = ++c, c++, ++a, a++;
	b += a++ + c;
	printf("a = %d b = %d c = %d\n:", a, b, c);
	return 0;
}

这个代码的结果是多少呢?

在明确介绍里的知识之后我们知道

c=++a

这里计算之后c=a=a+1=6

b = ++c, c++, ++a, a++;

这个则需要我们清楚,他其实是b=++c  (c++, ++a, a++);

首先算b=++c    b=c=6+1=7

(c++, ++a, a++)  的计算顺序是 c=c+1=8 ,  a=a+1=7 ,  a=a+1=8

此时a=8  b=7  c=8

b += a++ + c  其实是b=b+ a +c   (因为a++是先把a赋给这里a++对应的地方,然后在整个式子算完之后再把a自身+1

也就是b=7+ 8+8=23

然后a=a+1=9

c还是=8

除此之外还看到了网上一个很有意思的式子

x=++a+b+++c++

到底改怎么断句呢

答案是x=(++a)+(b++)+(c++)

这个的突破口在于最后的++一定是和c配合,从后往前分析

2.移位操作符

 >>右移操作符

<<左移。。。

看箭头指向哪里就应该是向哪个方向移动

a<<1    a向左移动1(一个比特位)

移位移的是二进制位,内存中整数的存储都是补码

所以移动的时候也是写出补码再移动(因为如果只是原码移动那较小的负数左移1岂不是变成正数) 

补码移动结束之后应该变成原码,因为打印的都是原码

原反补规则:

原码  —— 符号位不变其他位按位取反  ——>反码——+1——>补码

补码  ——-1——>反码——符号位不变其他位按位取反  ——>原码

补码变成原码还用更好用的方法

和原码——>补码的过程完全一样!!!

补码———符号位不变其他位按位取反——>反码——+1——>原码

其实仔细思考符号位不变的原因也是为了防止造成符号的丢失

<<补码左移之后   左边丢弃   右边补充0

>> 

分为两种

1.算数右移    补码右移之后左边补充符号位

2.逻辑右移     补充0

一般来说编译器采用的都是1

3.位操作符

0为假   非零为真

&   其实和数学上“且”的逻辑相同:全真才真,有假则假

|    等价“或” 有真则真,全假才假

^   相同为0,相异为1 

以上的相同或相异都是在补码上操作的 

写给和我一样的普通人:

自己接触C一个月,整体的感觉就是很艰难,也许非班科的生活就是这么忙碌,也许入门的过程就是这样困难,也许普通人的认知上限就摆在那里,

但是通过我的经验,其实自己有多逻辑清晰,代码就有多“聪明”,刷题的时候试着先在纸上写出思路再去实践,多去回顾经典题型,手感和眼界很重要

不要计较自己的能力没有别人强,只是一个开始谁会学的更扎实也未可知

最后引用一个我很喜欢的作者——史铁生的一句话(鲁迅太经典大家都听腻了哈哈)

“大多数时候的放弃,是你败给了自己,而不是命运。”  ——《我与地坛》,史铁生

创作不易,感谢观看 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值