unsigned int mileage=0;unsigned int SpeedVal=60;mileage=(Carmeter.SpeedVal*10000/3600);为什么mileage的打印会是15
时间: 2024-05-05 17:21:31 浏览: 17
根据你提供的代码,我发现问题在于 `Carmeter.SpeedVal` 并没有被正确地使用。在这个表达式中, `Carmeter.SpeedVal` 应该改为 `SpeedVal`,因为 `SpeedVal` 是定义了一个车速值为60的无符号整型变量,而 `Carmeter.SpeedVal` 没有被定义。修改后的代码如下:
```c++
unsigned int mileage = 0;
unsigned int SpeedVal = 60;
mileage = (SpeedVal * 10000 / 3600);
printf("mileage = %d\n", mileage);
```
这样,`mileage` 的值应该是1666,而不是15。
相关问题
优化:unsigned int s5 = price / 100 ;
可以考虑使用乘法运算的方式来优化除法运算,将除数改为2的幂次方的倒数,这里改为除以0.015625(即乘以64):
```
unsigned int s5 = (price * 64) >> 10;
```
这里乘以64后再右移10位,相当于除以100。这种方式可以减少除法运算的开销,提高代码的执行效率。但是需要注意,除数的倒数必须能够精确表示,并且优化后的结果与原始代码的结果一致。
volatile unsigned long long int milliseconds = 0; // 用于存储毫秒数 int running = 1;
这段代码定义了一个 `volatile unsigned long long int` 类型的变量 `milliseconds` 和一个 `int` 类型的变量 `running`。
`milliseconds` 用于存储毫秒数,`volatile` 关键字的作用是告诉编译器该变量的值可能会在意料之外的情况下改变,从而防止编译器对该变量进行优化,确保每次访问都从内存中读取最新的值。
`running` 是一个标志变量,用于表示程序是否正在运行。在这里,将其初始化为 `1` 表示程序开始时处于运行状态。可以根据需要在程序的其他地方修改 `running` 的值来控制程序的执行流程。