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++程序中依賴求值順序,否則會死的很慘

 

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