你学的这个不是C语言,而是谭语言。高校各专业的必备课程。学生普遍依靠背题通过期末考试。
号称计算机劝退第一人,不是让你学会,而是让你学不会,凭实力阻挡了无数青年入门计算机。避免了学生都去做计算机,没人去做别的行业工作这种情况。
配合Dos系统下的Turbo C,可以映衬的满脸发蓝,学习效果更佳。
看到很多答案吐嘈这个问题本身,我却认为,这是个很正常、定义清楚的问题。首先回答一下。
C语言在一个表达式中,遇到多个运算符的时候,要考虑优先级(precedence)和结合方向(associativity)去判断怎样求值。举例a op1 b op2 c
有两种可能性
(a op1 b) op2 c
a op1 (b op2 c)
如果 op1 的优先级较 op2 高,那么其语意就是第 1 种情况。
如果 op1 的优先级较 op2 低,那么其语意就是第 2 种情况。
如果 op1 和 op2 的优先级相同,那就要取决于结合方向。结合方向是「左至右」或「右至左」。例如,=
(赋值运算符)的结合方向为「右至左」,所以:
a = b = c
的语意为 a = (b = c)
而 -
(二元减运算符) 的结合方向为「左至右」,所以:
a - b - c
的语意为 (a - b) - c
C 语言运算符的优先级和结合方向在一般的入门编程书籍都会提到,也可参考 C 运算符优先级:
对于问题,+=
的优先级是 14(差不多是最低),==
是 7,那么 ==
会优先于 +=
,所以:
x += 5 == 4
的语意为 x += (5 == 4)
因为 5 == 4
为假,求值结果为 0
,所以该表达式又等于 x += 0
。
关于回答的部分结束。
至于有答案说到,学这种东西有什么用,编程不要这么写,我说一下愚见。
除为了功课、考试,要懂得答这种问题外,我觉得,在学习编程时,上述的优先级和结合方向等编程语言概念是应该要知道的。学会了,接触其他编程语言时,看一下它有没有这样的表,就能快速学习。当然,如果将来要学习编译原理,就更加知道编程语言的设计所要考虑的东西,以至如何把文本转成语法树等知识。
在实际应用中,学习了一些奇奇怪怪的东西也并不一定要写出来,但读懂是需要的。有时候,我们也会看到自己或其他人不小心写错了,做成 bug,如果看也看不出问题就是个问题。
C 语言标准是数百页的文档,大部分人不会仔细研究每个细节,我也不在例外。一个工程师可以说某些东西没用,可能因为他在工作中没用到。
知之为知之,不知为不知,是知也。
我觉得没有用的东西,只是一种个人的评价,没有普遍性。这不影响一个问题是否值得问,是否值得有一个详尽的答案,该答案是否让问者及其他人能获得收益。
其实从编程的角度,这种设计是需要严格禁止的。
换句话说:外表相似但实质表现不同的函数,我们需要把它的接口或者名称有意做得不同,避免误用。
所以:这个商品的设计师,它肯定不懂编程。
如果是我,可能会刻意的改变USB插座的位置布局,让它看起来长得不一样。——至少改变一下USB插口的颜色。
--
老插线板名义上是 5V2A 的 10W 插线板,实际上是单口输出最大2A,多口同时输出的情况下,它的实际表现大约是 5V1A,也就是苹果那个万年诟病充电头的水平。——换句话说,旧插线板的USB接口,几乎是没有什么用处的鸡肋。
新插线板,号称单口27W,多口的情况下肯定会缩水,但我猜测至少QC3.0快充是可以用的。相比旧板子应该说是从协议层面有了很大进步。一个典型的例子是接无线充电器不需要浪费充电头了。
解释一下:小米目前的无线充是 30W,需要30W的充电头,但商城只有 18W 跟 65W 的充电头出售,小米商城根本没有适配无线充的 30W 充电头。如果插这个接线板,大概能当 27W 用吧?