标签: operator-precedence

这个 Java 程序中运算符优先级的逻辑有什么问题?

class Hello {
    public static void main(String args[]) {
        int i = 10;
        i *= i++ + i;
        System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

根据运算符的优先级,后缀运算符的优先级高于乘法运算符。括号内的操作数具有更高的优先级。

首先评估它们: i*(i++ + i) 所以,现在,括号内是 10+11: i*(21)

i 的当前值为 11

其次,由于下一个优先级计算乘法运算符,它不应该是11*21=231吗?

虽然,我知道答案是 210,为什么我上面解释的逻辑是错误的?

java operator-precedence operator-keyword

0
推荐指数
1
解决办法
591
查看次数

C语言中int转Double的方法

int num1, num2;
Run Code Online (Sandbox Code Playgroud)

double average;

average=(double)(num1+num2)/2;
printf("average: %d", average);
Run Code Online (Sandbox Code Playgroud)

我的测试 printf 显示平均值为: 0

这可能太简单了,但我看不到。我的输入都是“int”,平均值是“double”,但不知怎的,它计算不正确?

c types casting operator-precedence

0
推荐指数
1
解决办法
3万
查看次数

三元运算符的右结合性

std::cout << (true ? "high pass" : false ? "fail" : "pass")
Run Code Online (Sandbox Code Playgroud)

是相同的

std::cout << (true ? "high pass" : (false ? "fail" : "pass"))
Run Code Online (Sandbox Code Playgroud)

既然三元运算符是右结合的,为什么我们不先进行右运算呢?不应该pass打印而不是high pass

c++ operators operator-precedence associativity

0
推荐指数
1
解决办法
498
查看次数

此 C 代码会导致未定义行为吗?

我知道:

int b = 1, c = 2, d = 3, e = 4;
printf("%d %d %d", ++b, b, b++);
Run Code Online (Sandbox Code Playgroud)

导致未定义的行为。自从

在两个序列点之间多次修改任何对象是 UB。 未定义的行为和序列点

但我不知道是否:

int b = 1, c = 2, d = 3, e = 4;
printf("%d", b++ + ++c - --d - e--);
Run Code Online (Sandbox Code Playgroud)

也是UB吗?

我认为递增/递减运算符将首先评估,因为它们之间的优先级从右到左,因为 associativity 。然后算术运算符将从左到右计算。

这将是

(b) + (c + 1) - (d - 1) - (e)

即 1 + (2 + 1) - (3 - 1) - (4)

= (2 - 4)

= -2 …

c operator-precedence undefined-behavior sequence-points

0
推荐指数
1
解决办法
106
查看次数

为什么instanceof和addition以错误的顺序执行?

当我简单地写代码时

String x = null;

System.out.println(x instanceof Object);
Run Code Online (Sandbox Code Playgroud)

输出为false,正如预期的那样。

但当我尝试将其写得略有不同时,即:

public class Main {
        public static void main(String[] args) {
        String x = null;
        System.out.println("Result is: " + x instanceof Object);
    
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到true作为输出。为什么?

x instanced Object应该还是false这样吧?我想得到像这样的输出

Result is: false
Run Code Online (Sandbox Code Playgroud)

java operator-precedence

0
推荐指数
1
解决办法
103
查看次数

C中多次循环失败后出现段错误

我正在做一个练习,创建一个数组并用整数填充元素。我首先将数组的长度输入到 malloc 中作为大小。然后,我在 for 循环中扫描数组中每个点的元素。

这是代码

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

int scaning(int ** array){
    int size;
    scanf("%d", &size);
    *array = malloc(sizeof(int)*size);
    //printf("%d\n", size);
    for (int i=0; i<=size; i++){
        int num;
        scanf("%d", &num);
        *array[i] = num;
    }

    return size;
}


int main(){
    
    int * array;
    int zero;
    zero = scaning(&array);
    //printf("%d\n", zero);
    printf("LOOPS\n");
    for (int i=0; i<= zero; i++){
        printf("%d\n", array[i]);
    }
    return 0;
}

Run Code Online (Sandbox Code Playgroud)

在我输入元素填充数组两次后,出现段错误。我通常输入 5 个数组的大小,输入 2 个数字,然后它就会崩溃。不知道我哪里出错了。有任何想法吗?

c for-loop pass-by-reference operator-precedence dynamic-memory-allocation

0
推荐指数
1
解决办法
39
查看次数

C 中被误解的运算符优先级

我正在做一些关于C语言中操作执行顺序的练习,我遇到了一个我不太理解的情况。

int d = 1;
int e = d--/10;     // the result of e will be 0;
Run Code Online (Sandbox Code Playgroud)

在计算“e”的值之前,我们先递减“d”,然后再进行除法。

另一方面,在“f”中,我们在递减“d”之前进行了除法!

int d = 1;
int f = 10/d--;     // the result of f will be: 10
Run Code Online (Sandbox Code Playgroud)

我的问题是:既然知道在这两种情况下“d”的减量都是后减量,为什么使用的“d”值存在差异?

c arithmetic-expressions operation operator-precedence

0
推荐指数
1
解决办法
90
查看次数

在代数表达式中如何使用关系运算符?

我遇到了一段代码,其中<=在 C 中的代数表达式中使用了 。

int x=2, y=4, z=5, m=10;
m+= x * y + z++ <=m+3;
printf("%d, %d", m,z);
Run Code Online (Sandbox Code Playgroud)

我从未见过以这种方式使用关系运算符,并且想知道如何计算其输出。运行时收到的输出是 11, 6。<=这里以什么方式工作?

c operator-precedence post-increment relational-operators

0
推荐指数
1
解决办法
113
查看次数

c中的`void *ptr[N](int)`和`void (*ptr)[N](int)`有什么区别?

假设我有\nvoid (*ptr[3])(int) \n并且\nvoid (*ptr)[3](int)

\n

第一个按预期工作。\n但第二个抛出错误。

\n

我尝试了这两种方法,但无法找出问题所在。\n错误内容如下:

\n
\n

“..错误:将 \xe2\x80\x98ptr\xe2\x80\x99 声明为函数数组 void\n(*ptr)3;”

\n
\n

c pointers function operator-precedence

0
推荐指数
1
解决办法
101
查看次数

为什么“int”出现在“input”之前?我想了解这段代码的逻辑

我的老师给了我这个问题:编写一个读取整数并打印它的程序。所以我找到了这段代码:

integer_number = int(input("Enter an integer: "))

print("You entered:", integer_number)
Run Code Online (Sandbox Code Playgroud)

我想了解为什么函数:“int”先于“input”

我希望“input”函数比“int”函数先出现,因为“input”具有向用户请求信息以便用户填写信息的功能,而“int”则将给定的字符串转换为整数。

python syntax operator-precedence

0
推荐指数
1
解决办法
199
查看次数