你能帮我改进一下吗?

问题描述 投票:0回答:2

我想改进代码的这一部分,我正在考虑使用:

        if((0 < NumberOfSensor) && (NumberOfSensor< 9))MaxPageNumber = 1;
        if((8 < NumberOfSensor) && (NumberOfSensor< 17))MaxPageNumber = 2;
        if((16 < NumberOfSensor) && (NumberOfSensor< 25))MaxPageNumber = 3;
        if((24 < NumberOfSensor) && (NumberOfSensor< 33))MaxPageNumber = 4;
        if((32 < NumberOfSensor) && (NumberOfSensor< 41))MaxPageNumber = 5;
        if((40 < NumberOfSensor) && (NumberOfSensor< 49))MaxPageNumber = 6;
        if((48 < NumberOfSensor) && (NumberOfSensor< 57))MaxPageNumber = 7;
        if((56 < NumberOfSensor) && (NumberOfSensor< 65))MaxPageNumber = 8;
c performance if-statement
2个回答
1
投票

您没有指出变量的数据类型,但根据上下文,我假设它们是整数类型。由于所有整数间隔检查都是相同的“宽度”,因此您可以使用计算和一个条件替换多个范围检查:

if (NumberOfSensor > 0 && NumberOfSensor < 65)
    MaxPageNumber = (NumberOfSensor + 7) / 8;

同样,这假设变量是整数类型。在C中,当严格处理整数运算和赋值时,整数除法取结果的底限,例如,9/8得到1。

如果MaxPageNumber <= 0或> 64,则代码​​不会更改NumberOfSensor。因此,如果您希望代码的行为与原始代码完全相同,则仍需要if条件。

请注意,上述计算与另一个答案中公布的计算结果相同。任何一个人都会这样做。


0
投票

我假设NumberOfSensor是一个从1到64的整数。如果是这种情况,那么你可以简单地使用:

MaxPageNumber = ((NumberOfSensor-1) / 8) + 1;
© www.soinside.com 2019 - 2024. All rights reserved.