【问题标题】:Are long int and int both same on reading data?long int 和 int 在读取数据时是否相同?
【发布时间】:2016-02-29 21:57:32
【问题描述】:

如果我有一个 long int 和 long 并且我必须为它们分配相同的值,那么它们中的哪一个会被快速读取

#inlude<stdio.h>
int main(){
    long long int  i;
    long int j;
    int k;
    scanf("%lld %ld %d",&i,&j,&k);
    return 0;
}

我的疑问是数据将首先存储在其中的哪个中????

【问题讨论】:

  • 你真的关心微秒的差异吗?
  • @user3528438 它是 nano 甚至 pico...
  • 他的绿色变量总是比红色或蓝色的快——说真的:你的问题是什么?你能打字多快?
  • 我说的是 0.01 秒
  • 它不会产生可衡量的差异。首先,在这个具体的例子中,scanf 调用将花费尽可能长的时间来扫描所有三个项目,因此它的性能将由三个项目中最慢的一个决定;你想把它分成三个不同的scanf 调用,看看是否有区别。即使有,相对于执行上下文切换所需的时间,它也会减少噪音。

标签: c


【解决方案1】:

scanf()intlong 的性能肯定相差不大。但是 OP 提出了另一个更有趣的问题

我的疑问是数据将首先存储在其中的哪个中????

C 确实指定“fscanf 函数依次执行格式的每个指令”。这强烈建议i 写在j 之前,等等。我认为这意味着文本输入的处理按格式顺序进行,但只是没有指定i,j,k 的顺序 书面

我对以下内容有疑问,并已发布question
需要明确的是,如果i,j,k 都被扫描,库可能会先写k

代码是如何分辨的,为什么要关心它?指定传入文本的顺序以及如何将其应用于i,j,k 。当然,如果只扫描 3 个中的 1 个或 2 个。 k 未写入。

最好检查返回值,因为这会通知调用代码调用成功。

switch (scanf("%lld %ld %d",&i,&j,&k)) {
  case 3: puts("Success"); break;
  case 2: puts("Only i,j"); break;
  case 1: puts("Only i"); break;
  case 0: puts("None"); break;
  case EOF: puts("EOF or input error"); break;
}

【讨论】:

    【解决方案2】:

    由于 int 通常比 long longs 和 longs 小,因此 int 读入速度更快是有道理的,但我认为还不足以注意到计算方面的差异。

    int vs long vs long long

    int faster than long

    【讨论】:

    • 在 scanf 的上下文中这些都不重要
    猜你喜欢
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多