程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> java中的 i++ 與 C中的 i++ 的區別

java中的 i++ 與 C中的 i++ 的區別

編輯:C++入門知識

java中的 i++ 與 C中的 i++ 的區別


java中:

采用中間變量機制:
i = i++;

相當於:

temp = i;
i = i + 1;
i = temp; (即i = i++ = temp)

## 注:在二元操作符(“=”、“+”)對應的指令生成之前生成一個自增指令(即:在 “+” 和 “=” 運算執行前,就已經自增了)。##

問題實質:在java中,執行自增運算時,會為每一個自增操作分配一個臨時變量,如果是前綴加(++i),就會“先自加1後賦值(給臨時變量)”;如果是後綴加(i++),就會“先賦值(給臨時變量)後自加1”。運算最終使用的,並不是變量本身,而是被賦了值的臨時變量。

=================================================================================================


int a = 0,sum;

java中,是使用完 a++ 這個表達式後,a立即加一;


對於sum = a++ + a++;

java中:第一個a++執行完後,a的值立即加一變成1,在第二個a++執行之前,a的值為1

a = 0;
a = a++ + a++;

temp1 = a; --> temp1 == 0;
a = a+1;
temp2 = a; --> temp2 == 1;
a = a+ 1;
a = temp1 + temp2;

=================================================================================================

int a = 0, sum;

a = a++;
System.out.println(a);

結果是:0 注:變量 a 的值的變化過程是:0 --> 1 --> 0 (初始化為0 --> a自增為1 --> 把臨時變量的值 1 賦值給a)
------------------------------------------------------------------------------------------------------------------------------------------

int a = 0, sum;

sum = a++ + a++;

System.out.println(sum);
System.out.println(a);

結果是:1和2

--------------------------------------
int a = 0, sum;

a = a++ + a++;

System.out.println(a);

結果是:1

--------------------------------------
int a,sum;
a = 0;

sum = a++ + ++a;

System.out.println(sum);
System.out.println(a);

結果是:2和2


================================================================================================================

C語言中:

++ 是一元運算符:+ 與 = 都是二元運算符

對於一元操作符來說,其返回值為:i++為i的值,++i是i加一後的值

i++ 操作意味著 在二元操作符對應的指令生成之後再生成一個自增指令(即:在 “+” 和 “=” 運算都結束後,才自增)。

++i 操作意味著 在二元操作符對應的指令生成之前生成一個自增指令(即:在 “+” 和 “=” 運算執行前,就已經自增了)。

================================================================================================================


int i = 0, sum;

// 測試一元運算符

若 printf("%d", i); 結果是:0

若 printf("%d", i++); 結果是:0

若 printf("%d", ++i); 結果是:1

----------------------------------------------------------------------
int i = 0, sum;

// 測試二元運算符

sum = i++;

printf("%d", sum);
printf("%d", i);

結果是:0和1

若改為:

i = i++;
printf("%d",i);

則結果是:1

----------------------------------------------------------------------

int a = 0, sum;


sum = a++ + a++;

printf("%d\n",sum);
printf("%d\n",a);

結果是:0和2

分析:

先執行第一個a++(此時,a的值為0),

再執行第二個a++(此時,a的值為0),

最後執行加法運算和賦值運算(此時,a的值為0,sum的值為 0 + 0 = 0),

加法運算結束後,執行a的兩次加一動作(此時a的值為2)

若改為:

a = a++ + a++;

printf("%d", a);

則結果是:2

----------------------------------------------------------------------

int a = 0,sum;

a = a++ + ++a;
printf("%d\n",a);

過程:
首先,a 自增1,這是由 ++a 帶來的(即使 a++ 在最左邊)。這時 a = 1

然後,我們計算 + 號的兩個操作數。
因為它們其實都是 a(這裡就涉及到編譯器實現的問題了,大多數C編譯器會將這兩個操作數合並,即都是變量a),
值都為1,這樣的話 a++ + ++a 的返回值是1+1=2,接著把 a++ + ++a 的值賦值給a,此時 a = 2

最後,完成 a++ 帶來的自增指令,此時 a 的值為 2+1=3,這是 a = 3

結果是:3


若改為:
sum = a++ + ++a;
printf("%d",sum);
printf("%d", a);


過程:
首先,a 自增1,這是由 ++a 帶來的(即使 a++ 在最左邊)。這時 a = 1

然後,然後,我們計算 + 號的兩個操作數。
因為它們其實都是 a(這裡就涉及到編譯器實現的問題了,大多數C編譯器會將這兩個操作數合並,即都是變量a),
值都為1,這樣的話 a++ + ++a 的返回值是1+1=2,接著把 a++ + ++a 的值賦值給sum,此時 sum = 2,a = 1

最後,完成 a++ 帶來的自增指令,此時 a 的值為 1+1=2,這是 a = 2

結果為:2和2

================================================================================================================

a = a++ ++a; 在 java 中和 C 中的區別

java 中,先執行 a++,
C中,先執行 ++a

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved