JAVA 运算符与c++的不同

JAVA 运算符与c++的不同

JAVA--按运算符的功能,将运算符分为:算术运算符、关系运算符、逻辑运算符、位运算符等
             按参与运算的操作数的个数,将运算符分为:单目运算符、双目运算符、三目运算符

C++   --  在c++中不存在位运算符。

JAVA--+号可以连接字符串  例如(abc+1+2、、、、、)  在c++中不可以连接字符串

JAVA--中取模对象可以是小数  例如(16.2%5=1.2)
C++  中  取模对象必须是整数

 

 

 

"++"在不同语言里   所表示的含义

“++ 运算符在C/C++、C#、JAVA中的差异”中的差异不是语言本身的差异,而是相应编译器的差异。

刚刚说过,i++ 与 ++i 在它们的编译器中表现是一样的,但i=i++; 与i=++i;呢 i=++i 这个没有分歧,有分歧的是i=i++ 在C/C++ 中

i=i++; i 自增前的值就是这个表达式的值,在表达式执行后 i自增1 如果 i=1 的话,i=i++ 就等于1 ,i=i++ 执行后 i=2。

int i=1;  printf("%d/n",i = i++); printf("%d/n",i);   会打印出1和2 就是说会对i先赋值,然后对i自增1。

而在C#与JAVA中  i=i++ 等于 i 的值,而 i 的值会变化但仍然是之前的值。因为C#与JAVA的编译器会严格遵循运算符优先级,首先对=右侧求值也就是 i 的值,

然后将 i 值入栈(将1入栈),之后优先级的缘故 ++ 在 = 之前执行 i 先自增1 变成2,然后将栈里的1 赋值给 i , i 这时又变回了1。

相对于C/C++的编译器来说C#与JAVA的编译器的做法更容易解释也更合理,在我看生成的汇编代码前,以为C/C++编译器也会严格遵循优先级,

故猜测是将 i 的地址入栈而不是直接将值入栈所以出现的不一致,但看过之后证明我的猜测是错误的,C/C++编译器是将值放在寄存器中,

但与C#和JAVA的编译器不同的是它未严格遵守运算符优先级,就我目前掌握到的这属于C/C++编译器undefined的范畴,

它们的执行逻辑随编译器的不同而不同。所以千万不要在C/C++程序中依赖求值顺序,否则会死的很惨

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章