【问题标题】:What does this do? [duplicate]这是做什么的? [复制]
【发布时间】:2012-05-22 11:33:18
【问题描述】:

可能重复:
The ternary (conditional) operator in C

这是我的老师帮助下的代码示例。我不知道total = total*2+ (n=='1'? 1:0); 做了什么。我认为它将总数乘以 2,但问号和1:0 比率是什么?

int bcvt(FILE *infile){
  char n;
  int i, total=0;
  for(i=0; i<32; i++){    
    fscanf(infile, "%c", &n);
    total = total*2+ (n=='1'? 1:0);
  }
  char dummy;
  fscanf(infile, "%c", &dummy);
  return total;
}

【问题讨论】:

  • 我什至不知道从哪里开始搜索或要搜索的关键字。谢谢六字变量
  • 没问题。每个 C/C++ 的新手都会被它的称呼所困扰。
  • @CarlNorum,让他休息一下,搜索三元运算符很困难,因为您首先需要知道它被称为三元运算符...我多年前遇到完全相同的问题,我结束了通过搜索“问号运算符”找到它。
  • 这就是我的观点 - 谷歌搜索“问号 c”会出现 this link 作为第一个点击。
  • 人们从哪里得到这样的想法,即他们可以在不打开 C 入门书籍的情况下学习 C?

标签: c binary


【解决方案1】:

声明

(n=='1'? 1:0)

等价于

if ( n == '1' ) return 1
else return 0

所以如果 n 为 '1' 则返回 1,否则返回 0。

格式为:

( expression ? if-true-return-this-value : else-return-this-value )

【讨论】:

  • 值得一提的是,三进制部分在C语言中是多余的:n=='1'就足够了。
【解决方案2】:

它类似于 if 语句。 视情况而定

n=='1'

为真或假,运算将返回(1:0)左边为真,右边为假。

值可以是任何值。 1 和 0 在这里是随机的。

if (n == '1') {
   return 1;
}
else {
   return 0;
}

【讨论】:

  • 不,不一样。使用三元运算符是表达式的一部分并产生一个值。 if 语句没有。
  • 你说得对,让我编辑一下。
【解决方案3】:

这里的条件运算符是这样的:“如果 n 等于 1,则使用 1,否则使用 0”。所以它会根据 n 的值给第一个表达式加 1 或 0。

这是编写 if/else 语句的另一种方式。

【讨论】:

    【解决方案4】:

    这个表达式“(n=='1'?1:0)”等价于if ( n == '1') return 1; else return 0; 如前所述,它是 C 中的三元(条件)运算符。

    我猜你的代码正在加载,然后将二进制字符串“0001010”转换为整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-06
      • 2014-04-03
      • 1970-01-01
      • 2013-02-17
      • 2021-11-03
      • 2014-06-24
      • 2023-03-05
      • 2019-11-18
      相关资源
      最近更新 更多