您能帮我改善一下吗?

时间:2019-03-18 23:50:51

标签: c performance if-statement

我想改进代码的这一部分,我当时正在考虑将其用于:

        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;

2 个答案:

答案 0 :(得分:1)

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

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

同样,这假定变量是整数类型。在C语言中,当严格处理整数算术和赋值时,整数除法取结果的 floor ,因此,例如9/8的结果为1。

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

请注意,上述计算结果与其他答案中发布的计算结果相同。任一个都可以。

答案 1 :(得分:0)

我假设NumberOfSensor是1到64之间的整数。如果是这种情况,则可以简单地使用:

MaxPageNumber = ((NumberOfSensor-1) / 8) + 1;