Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Java 检查4个整数变量是否等于0的最佳方法是什么?_Java_If Statement - Fatal编程技术网

Java 检查4个整数变量是否等于0的最佳方法是什么?

Java 检查4个整数变量是否等于0的最佳方法是什么?,java,if-statement,Java,If Statement,我有4个非负整数值a、b、c和d。如何以最佳方式检查a、b、c和d是否都等于0? 哪一种是最小计算量的最佳实践 如果(a==0&&b==0&&c==0&&d==0) 或 如果(a+b+c+d==0) 或者java中的任何其他最佳方法?您可以检查数字的最大值是否为零,或者检查它们的和(算术或)是否为零 没有一种通用的“最佳”方式 如果你的目标是清晰,那么如果(a==0&&b==0&&c==0&&d==0)很难击败 如果您以性能为目标,您需要: 确定这段代码的性能实际上很重要 使用编译器、目标硬件和

我有4个非负整数值a、b、c和d。如何以最佳方式检查a、b、c和d是否都等于0? 哪一种是最小计算量的最佳实践

如果(a==0&&b==0&&c==0&&d==0)

如果(a+b+c+d==0)


或者java中的任何其他最佳方法?

您可以检查数字的最大值是否为零,或者检查它们的和(算术或)是否为零

没有一种通用的“最佳”方式

如果你的目标是清晰,那么如果(a==0&&b==0&&c==0&&d==0)很难击败

如果您以性能为目标,您需要:

  • 确定这段代码的性能实际上很重要
  • 使用编译器、目标硬件和典型输入对各种方法进行基准测试

  • 使用按位或对所有变量执行二进制或运算,并检查其二进制或为零

    (a | b | c | d)==0

    最好的方法是

    if (a==0 && b==0 && c==0 && d==0)
    
    这会在一个变量不为零时停止比较,如果所有变量均为零,则会对每个变量执行一次比较


    它还清楚地表达了您要做的事情,即检查所有变量是否为零。Twitdle位可能带来一个小的优势(或者不测量它),但是它混淆了你的代码,显然进入了微优化的领域。

    <代码>(a)是自动<代码> false < /> > <代码> a=0 < /代码>,至少在C、C++和许多其他语言中,了解您使用的是哪种语言会很有帮助。对所有变量执行二进制或检查零您指的是非负值,对吗?答案可能取决于编程语言,您忽略了这一点!这个问题的答案将取决于语言。投票关闭,直到添加语言规范。但是跳转是昂贵的。如果您分析了您的程序,并确定跳转比比特旋转更昂贵,那么当然,开始比特旋转。但是,如果与您可以同时对代码的其他部分进行的优化相比,这带来了一个重大的速度改进,我会感到惊讶。还要注意的是,如果((a | b | c | d)==0)
    if(a==0&&b==0&&c==0&&d==0)
    执行的跳转次数完全相同。(如果其中一个变量不为零,则跳转到
    else
    分支。)从数学上讲,可以求和,但在Java中无法静态地确保数字确实是非负的,因此
    (a | b | c | d)=0
    将更安全,并且适用于任何整数。使用求和方法时,您还必须处理整数溢出的可能性。是的,以下操作失败:a=b=c=d=0x40000000。产生0+1,最好的答案,当其中有负数时,这也有效。
    (a | b | c | d)==0
    (a+b+c+d==0)
    :您不需要担心算术溢出。
    if (a==0 && b==0 && c==0 && d==0)