Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,将一个timeval除以一个整数_C_Time - Fatal编程技术网

在C语言中,将一个timeval除以一个整数

在C语言中,将一个timeval除以一个整数,c,time,C,Time,我试图将timeval除以一个整数。以下是到目前为止我得到的信息: #include <limits.h> #include <stdio.h> #include <stdlib.h> int main(void) { struct timeval my_time; struct timeval my_time_quotient; int i; gettimeofday(&my_time, NULL);

我试图将
timeval
除以一个整数。以下是到目前为止我得到的信息:

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
     struct timeval my_time;
     struct timeval my_time_quotient;
     int i;

     gettimeofday(&my_time, NULL);
     i = 5;

     my_time_quotient = my_time / i;

     printf("%d secs, %d msecs\n", (int)my_time_quotient.tv_sec, (int)my_time_quotient.tv_usec);

     return 0;
}

求商的正确方法是什么?

你不能直接将一个
struct
除以一个数字类型,即使
struct
代表某种数字

您必须首先将结构转换为表示微秒数的整数类型。由于元素的类型为
int
,因此您需要找到一个位数几乎是
int
的两倍的数字类型。希望您的编译器支持
long-long-int
\uuuu-int64
,两者都是64位

将结构的内容转换为数字类型后,除法将与任何除法一样直接进行


执行除法后,您需要将结果存储回timeval,可能需要使用“除法后的余数”或“模数”运算符,
x%y

您不能直接将
结构
除以数字类型,即使
结构
表示某种数字

您必须首先将结构转换为表示微秒数的整数类型。由于元素的类型为
int
,因此您需要找到一个位数几乎是
int
的两倍的数字类型。希望您的编译器支持
long-long-int
\uuuu-int64
,两者都是64位

将结构的内容转换为数字类型后,除法将与任何除法一样直接进行


执行除法后,您需要将结果存储回timeval,可能需要使用“除法后的余数”或“模数”运算符,
x%y

因为这可能是一个家庭作业问题,我不会给您任何代码,但我会给您解释为什么它不起作用,以及使其发挥作用的方法

当使用普通的旧数据类型(整数、双精度)时,可以进行除法。然而,timeval并不是一种简单的旧数据类型——它是结构中两种数据类型的组合。timevals结构不知道如何被整数除(当它说
二进制操作数无效/(有'struct timeval'和'int')
时就是这个意思)


因此,您必须手动执行此操作-划分秒数(tv_sec),然后划分纳秒数(tv_usec),并将这些划分的结果插入到您的
my_time_商
timeval中。处理几分之一秒的时间留给读者作为练习-但是希思建议的方法是一种方法。

由于这可能是一个家庭作业问题,我不会给你任何代码,但我会给你解释为什么它不起作用,以及使它起作用的方法

当使用普通的旧数据类型(整数、双精度)时,可以进行除法。然而,timeval并不是一种简单的旧数据类型——它是结构中两种数据类型的组合。timevals结构不知道如何被整数除(当它说
二进制操作数无效/(有'struct timeval'和'int')
时就是这个意思)


因此,您必须手动执行此操作-划分秒数(tv_sec),然后划分纳秒数(tv_usec),并将这些划分的结果插入到您的
my_time_商
timeval中。处理几秒钟的分数留给读者作为练习-但是Heath建议的方法是一种方法。

如果这是一个家庭作业问题,请添加“家庭作业”标签,这样我们就不会立即给出答案。欢迎使用Stack Overflow。如果您想回复此类邮件,请单击问题下方和每个答案下方的“添加评论”链接。如果这是一个家庭作业问题,请添加“家庭作业”标签,以便我们不会立即给出答案。欢迎使用堆栈溢出。如果您想回复这样的消息,请单击问题下方和每个答案下方的“添加评论”链接。这不会像前面所说的那样起作用-秒数除以的结果将需要保留任何分数结果(即,复杂的数学,无论是浮点数还是定点分数),将一秒钟的分数累积到微秒计数器中,检测微秒溢出,并将增量带入秒计数器中……我将您的注意力引导到注释“处理秒分数留给读者作为练习-但希思建议的方法是一种方法。”我不是说你要用长整数除以除数得到秒数。我想说的是,你需要自己用任何方法来处理除法,你的方法是正确的。这不会像前面所说的那样有效——秒的除法结果需要保留任何分数结果(即,复杂的数学,无论是浮点还是定点分数),将一秒钟的分数累积到微秒计数器中,检测微秒溢出,并将增量带入秒计数器中……我将您的注意力引导到注释“处理秒分数留给读者作为练习-但希思建议的方法是一种方法。”我不是说你要用长整数除以除数得到秒数。我要说的是,你需要自己用任何方法来处理这个问题,你的方法是正确的。
jen@ubuntu:~/$ gcc -g -otimespike timespike.c
timespike.c: In function ‘main’:
timespike.c:15: error: invalid operands to binary / (have ‘struct timeval’ and ‘int’)