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++程序中依赖求值顺序,否则会死的很惨。