这段代码的作用是啥,使用的每个符号是啥意思?使用的语言是 C,我只是编码的初学者

Posted

技术标签:

【中文标题】这段代码的作用是啥,使用的每个符号是啥意思?使用的语言是 C,我只是编码的初学者【英文标题】:What does this piece of code do and what does each of the symbols used mean? The language used is C and I am just a beginner to coding这段代码的作用是什么,使用的每个符号是什么意思?使用的语言是 C,我只是编码的初学者 【发布时间】:2015-04-22 04:45:08 【问题描述】:

遇到了一段我无法理解这两行代码在做什么的代码。甚至无法获得语法。请说明使用了哪些类型的功能,例如我猜在第一行中使用了条件运算符。

unsigned long long base_size = b >= 2 ? (b-2)/2:0;
printf("%llu\n",(base_size*(base_size+1))/2);

【问题讨论】:

是条件运算符 Ternary operator 获取一本关于 C 语言的书。然后查找 ?: 运算符,也称为三元运算符或条件运算符。接下来查找 printf 标准库函数及其格式字符串。 【参考方案1】:

这里使用的是条件运算符(也称为三元运算符,因为它使用了3个表达式)条件运算符的格式是

expression1 ? expression2 : expression3.

现在让我解释一下。

如果expression1的值为真,则整个表达式的值为expression2的值,否则,整个表达式的值为expression3

现在举这个简单的例子

result = marks >= 50 ? 'P' : 'F' ;

如果表达式marks >= 50 的计算结果为真,result 将具有值'P',否则,result 将得到'F'

现在让我们继续处理您的案例

unsigned long long base_size = b >= 2 ? (b-2)/2:0; 
printf("%llu\n",(base_size*(base_size+1))/2);

它检查是否b >= 2,如果是,则将base_size 赋值为(b-2)/2,否则将base_size 赋值为0。

也相当于

if( b >= 2 )
   base_size = ( b - 2 ) / 2;
else
   base_size = 0;

现在,以防万一你不知道

printf("%llu\n",(base_size*(base_size+1))/2);

它的作用是将base_size * ( base_size + 1 ) / 2 的值输出到您的输出屏幕上。

【讨论】:

【参考方案2】:

根据operator priority是c,第一行有效

unsigned long long base_size = ( b >= 2 ? (b-2)/2:0 );

现在,( ) 中的表达式使用ternary operator 或条件运算符。

根据C11 标准,第 6.5.15 章,语法为

conditional-expression:
                    logical-OR-expression
                    logical-OR-expression ? expression : conditional-expression

语义是[按照我的重点]

第一个操作数被求值;它之间有一个序列点 评估和第二个或第三个操作数的评估 (以评估为准)。 第二个操作数只有在 首先比较不等于0;仅在以下情况下评估第三个操作数 第一个比较等于 0;结果是第二个的值 或第三个操作数(以被评估者为准)转换为下述类型注意

注意:条件表达式不会产生左值。

那么,接下来,你的情况,

b >= 2 ? (b-2)/2:0 

首先,评估第一个表达式b >= 2。如果b 的值大于或等于2,则返回1,否则返回0

如果计算结果为1,则执行第二个操作数(b-2)/2,条件运算符的最终结果是表达式的值。

类似地,它的计算结果为0,第三个操作数0作为条件运算符的结果返回。

最后使用三元运算符的返回值来初始化unsigned long long base_size变量。

关于第二行,printf()是一个标准的C库函数,原型在stdio.h。您可以在此here 上找到更多信息。

【讨论】:

@iharob 谢谢。顺便说一句,更新了我的答案。请审查它。 :-) @iharob 现在很高兴听到活跃的 SO 成员的消息。谢谢和欢呼!!【参考方案3】:

这称为三元运算符

x = condition ? value : another_value;

意思

if (condition)
    x = value;
else
    x = another_value;

很明显valueanother_value 应该与x 具有相同的类型,并且condition 必须是一个可以计算为真值的表达式。

您发布的代码虽然看起来不太好,因为它很难阅读,但这样会更好

unsigned long long base_size;

base_size = (b >= 2) ? (b - 2) / 2 : 0;
printf("%llu\n", (base_size * (base_size + 1)) / 2);

这相当于

if (b >= 2)
    printf("%llu\n", (((b - 2) / 2) * (((b - 2) / 2) + 1)) / 2);
else
    printf("0\n");

【讨论】:

以上是关于这段代码的作用是啥,使用的每个符号是啥意思?使用的语言是 C,我只是编码的初学者的主要内容,如果未能解决你的问题,请参考以下文章

nm 命令中的“符号值”是啥意思?

这段代码中的“”是啥,它的基本作用是啥?

CSS中的符号波浪号(〜)是啥意思[重复]

Vue,$ 是啥意思?

能否解释一下下面这段代码是啥作用,例如#region的作用跟MyBase.new()的作用

SQL # 符号是啥意思,它是如何使用的?