1樓:我就是很煩
我知道問題出在哪,但是這個bug邏輯,我確實沒算出來。。。是因為實在太難了。。
輸出錯誤的原理在於,++和《的優先順序上。
c++的符號優先順序是c語言的優先順序一樣的,所以《雖然被cout用於過載輸出用,但是實際上還是左移運算子的優先順序,然而《左移運算子的優先順序比++,的優先順序都低,所以先做++,然後才輸出,因為輸出有多個<< 這樣的左移運算子,所以輸出是按從做到右的順序做的,然而輸出前的++,確實先做的,而且++,優先順序高,然後最大的bug就出現了,因為++,的運算,是右邊的先做,然後在做左邊的,所以第乙個輸出3。
因為輸出第乙個d++的時候,是先從最右邊的--d開始的,然後做d--,再做++d,最後才是輸出第乙個d++,這時候,先輸出d,所以這個時候的值是3,然後自增的,所以第二個就是4,至於後面兩個,就觸發bug了,d到底是多少啊?按道理,後面的兩個d--,d的運算早就做了,輸出的時候應該是直接輸出d的值的,然而也不是,已經搞不清楚編譯器面對這樣的bug是怎麼處理的了。。只能判斷出前兩個,第乙個是3沒錯,做完直接++了,所以第二個輸出4,因為第二個++d,根本不做++了,++早就在輸出第乙個值之前做完了,應該直接輸出第乙個運算之後的d的值,同理第三,第四,也應該是同乙個值,但是卻不是。。。
已經搞不清楚編譯器是怎麼處理的了。。。
解決方法:你的本意就是從左向右乙個乙個輸出,但是《運算子的優先順序太低了,所以只要乙個乙個的加上括號,保證每個d++,d這樣的運算做完,馬上保證《輸出運算子的優先順序,即可不會觸發這個bug,即應該改成(((cout《即可保證輸出都是正確的,每次都是先做第乙個++,操作後,馬上《進行輸出,結果之間不會干擾。
這樣的bug,就像c語言裡的c=c+c++,這樣的bug,c語言裡,這樣的程式也是會出bug的,因為c+c++這樣的運算,又要用到變數c的值,卻又對變數c的值進行了更改,結果是很危險的。。。你這裡的bug和c語言裡這樣的bug是同乙個原理。。。
2樓:她的心亞索不住
概念: 前置還是後置自增自減區別是在此語句中的,對後乙個語句沒有影響。 前置在此語句中不加1,執行完後加1; 後置在此語句中加1, 執行完後也是加1後的值。實。
3樓:獨孤逆天
d++和++d意思是不一樣的,同樣--d和d--也不是乙個意思,這個不奇怪啊,,d++是先運算再增加,++d是先增加再運算。
4樓:匿名使用者
每天改變一點點,我們的每一次小小的努力雖然看不出有明顯的變化,但是,「積土成山,集腋成裘」,量變的過程中必定會迎來質的飛躍。
5樓:網友
畫畫的大半用各色粉筆,也有用顏料的。見到的有三種花樣。或雙鉤tolive(求生)二字,每乙個字母約一英呎見方,在雙鉤的輪廓裡精細地作畫。
字母整齊勻淨,通體一筆不苟。或雙鉤goodluck(好運)二字,也有隻用luck(運氣)一字的。——求生」是自道;「好運」「運氣」是為過客頌禱之辭。
或畫著四五方風景,每方大小也在一英呎左右。通常畫者坐在畫的一頭,那一頭將他那舊帽子翻過來放著,銅子兒就扔在裡面。
6樓:網友
#include main() a的值先自加1,再呼叫,而b++就是先呼叫m。 -m m-- 同。
7樓:視名
由於自增和自減運算子的原理完全相同,所以我們在講解的時候僅以自增運算子舉例。(預警:本文舉例較多,篇幅較長,請耐心看完) 一、基本運算規則介紹 自增(++和自減(--運算子是對變數在原始值的基礎上進行加1或減1的操作。
它們都有字首和字尾兩種形式。
自增自減問題
8樓:網友
i++ 是先使用i,然後i才加1
所以會出現上述結果。
更進一步,同樣條件下。
printf("%d%d",-(i++)i);
的輸出結果是:-33
所以,不妨把後自加理解成運算級別最低的運算子。
9樓:長達89分鐘
總體應該是。
i = 3;
i++)= -3
i = 4因為i++是先計算後自增,計算-(i++)的時候,i還是3。也就是說 -(i++)== -i
i++)計算完之後,i自增,i=i+1。之後i就等於4了。
10樓:網友
後++會先計算結果後才自增。
關於自加自減的問題本人新手不太懂。
11樓:網友
當仿漏自加自減在後面的時候是先使用i,然後再使備並爛i的值自蔽裂加自減,所以也就是說這道題等於3+3+3=9呵呵,希望對你有幫助。
C語言中增1減1運算子,c語言關於自增自減運算子的一個問題
小嫣老師 自增 和自減 操作符為物件加1或減1操作提供了方便簡短的實現方式。它們有前置和後置兩種使用形式。i 等同於 i i 1。和 既可寫在變數之前,稱為前置運算,如 a a 和 也可以寫在變數之後,稱為後置運算,如 a a 對單獨一個變數實行前置運算或後置運算,其結果是相同的,都是使該變數的值增...
c語言關於自增自減運算的問題,C語言裡關於自增自減運算子的問題
這種問題,沒必要糾結。如果是 q j j 結果是7 7 14連續加法,正常邏輯應該為3 8 24,但實際上,因為編譯器的優化,連加被分割為兩次暫存器運算,等價於 int edx j j q edx j 這樣就成了7 7 8 22 這是優化問題,不必糾結。這就是實際運算模式,如果明白彙編,可以看懂。 ...
SQL SERVER自增資料表,如何查詢自增值的最大值
使用max函式即可。如 id name 1 張三 2 李四 3 王五 4 趙六 5 孫七 其中id是自增欄位。使用sql語句如下 select max id id from 表名 結果顯示為5,則5就是這個自增欄位的最大值。問題補充 比如,現在資料庫裡邊這個自增欄位存在的值是5,6可能已經被人刪掉了...