Java和C+之间有什么区别吗+;接线员? 如果你使用java的原始数值类型,加上布尔,并将它与C++等价类型进行比较,那么操作符有什么区别,比如优先规则或位操作操作符做什么?还是括号的作用 问了另一种方法,如果我用java表达式,并试图编译C++,它总是编译,总是给出相同的结果吗?< /P> < P>我相信C++与java之间的操作符优先级是一致的,并且表达式是确定的,那么它应该以同样的方式进行评估。p>

Java和C+之间有什么区别吗+;接线员? 如果你使用java的原始数值类型,加上布尔,并将它与C++等价类型进行比较,那么操作符有什么区别,比如优先规则或位操作操作符做什么?还是括号的作用 问了另一种方法,如果我用java表达式,并试图编译C++,它总是编译,总是给出相同的结果吗?< /P> < P>我相信C++与java之间的操作符优先级是一致的,并且表达式是确定的,那么它应该以同样的方式进行评估。p>,java,c++,operators,Java,C++,Operators,肯定有很多不同,因为在Java中几乎所有的数字类型都是有符号的。阅读Java拼图书和Java语言规范,了解所有细微的差异。 对于以下表达式: a = foo() + bar(); 在Java中,计算顺序是明确定义的(从左到右)。C++没有指定是否 >()>代码>或>代码>())/代码>首先被评估。 比如: i = i++; 在C++中是未定义的,但在java中又定义良好。 在C++中,对负数进行右移位是实现定义的/未定义的;而在Java中,它是定义良好的 在C++中,运算符和, < >

肯定有很多不同,因为在Java中几乎所有的数字类型都是有符号的。阅读Java拼图书和Java语言规范,了解所有细微的差异。

  • 对于以下表达式:

    a = foo() + bar();
    
    在Java中,计算顺序是明确定义的(从左到右)。C++没有指定是否<代码> >()>代码>或>代码>())/代码>首先被评估。

  • 比如:

    i = i++;
    

    在C++中是未定义的,但在java中又定义良好。

  • 在C++中,对负数进行右移位是实现定义的/未定义的;而在Java中,它是定义良好的

    在C++中,运算符<代码>和<代码>,<代码> < <代码> > <代码> ^ >代码>是纯位运算。在Java中,它们可以是位运算符或逻辑运算符,具体取决于上下文


右移操作员
>
不同。在java中,它总是算术移位,即它将符号位复制到最左边的位,而C++中则实现了它是否是算术或逻辑移位。在C++中C++ C++中不存在“代码> > >代码>的逻辑移位。

java指定了表达式的计算顺序,而不是C++,C++表示如果java表达式中的任何一个合法的评估顺序在序列点之间修改一个对象,则会得到未定义的行为。 <> > <>代码> I+++I++< /Cord>在java中定义良好,但C++中没有定义的行为(无需诊断)。因此,不能盲目地将表达式从java复制到C++。 <> P>位运算,java指定负数的两个补表示,C++不表示。并不是说你可能会在C++中遇到另一个表示,但是如果你这样做,你会发现,例如,在爪哇中,<代码> -2(1)< /> >总是“代码> -1”/代码>,但是在使用1s的补语的C++实现中是<代码> -2 <代码>。 int a=0

int b=(a++)+(a)


如果你打印<代码> B<代码>,它将在C++中输出<代码> 0 < /C> >而java

<代码> 1代码>,我认为当你在IE(int)中发生不同的事情时。我似乎记得,你可能会得到编译错误,你不会在C。我不知道我理解你。你的意思是用C编译的东西在Java中没有?那对我来说没问题。但是另一种方法是有问题的,是的,用C语言编译的东西是Java的强制不允许的。我想弄清楚昨晚是什么。。。该死的内存。我同意,有一些我在Java中不熟悉的按位运算符,但是如果>>被翻译成>>>,那么在只涉及原语的表达式中运算符的优先级(如OP所示)肯定仍然是相当一致的(假设实现遵循规范)。@Lazarus:你说得对,副作用(这就是我所想的)有些超出了问题的范围。当然,除非 Foo的副作用会影响<代码> Bar < /C> >的结果,反之亦然。@拉扎鲁斯:就后增量而言,C++是按。
i
有两个修改,但没有中间序列点,因此结果是未定义的。一个关于序列点的有趣片段,但让我们面对它,您的增量后语句不仅仅是边缘情况,它是边缘情况;)实现是定义每个编译器的平均值,还是定义每个操作系统的平均值?如果我在Windows上测试gcc,它在Linux上也会这样吗?或者我也不能依赖它吗?您只需要阅读编译器的文档。大多数现代编译器都会对有符号整数进行算术右移,因此如果gcc在Windows和Linux上的行为不同,我会感到惊讶,但您只需要阅读文档就可以确定了。