自增自減運(yùn)算符的規(guī)則 增1減1運(yùn)算符,前綴運(yùn)算和后綴運(yùn)算請(qǐng)大大們詳細(xì)舉例講解,為什么有變量的值和表達(dá)式的值?
增1減1運(yùn)算符,前綴運(yùn)算和后綴運(yùn)算請(qǐng)大大們詳細(xì)舉例講解,為什么有變量的值和表達(dá)式的值?您仍然不了解自動(dòng)遞增和自動(dòng)遞減運(yùn)算符的前綴和后綴之間的區(qū)別。前綴先操作,然后傳遞值。后綴則相反。第一個(gè)自動(dòng)增量操作
增1減1運(yùn)算符,前綴運(yùn)算和后綴運(yùn)算請(qǐng)大大們詳細(xì)舉例講解,為什么有變量的值和表達(dá)式的值?
您仍然不了解自動(dòng)遞增和自動(dòng)遞減運(yùn)算符的前綴和后綴之間的區(qū)別。前綴先操作,然后傳遞值。后綴則相反。第一個(gè)自動(dòng)增量操作生成左值,并在將1添加到操作數(shù)后返回更改的值;第二個(gè)自動(dòng)增量操作生成右值,并將1添加到操作數(shù),但返回未更改操作數(shù)的原始值。
左值和右值的概念:
左值:可以出現(xiàn)在賦值操作左側(cè)的值。非常量左值是可讀寫的。
右值:可用于賦值操作的右側(cè),但不能用于左側(cè)。正確的值只能讀不能寫。
Printf一般是從右向左讀取,但輸出結(jié)果仍然是從左向右輸出,第一個(gè)--I是1,I是2(第一個(gè)操作用--I值加1)這個(gè)有大腦問題的VC軟件不一定規(guī)定讀取順序,從右向左讀取還是不好看。盡量不要做這類問題,了解自我增加和自我減少的概念以及組合問題。
自增1自減1運(yùn)算符,如a 和 a怎么算呢,他們區(qū)別是什么呢?
在腳本語言中,此差異將因腳本解釋器的實(shí)現(xiàn)而異,因此不確定它可能有哪些具體差異。但在C語言中,這兩種方法的區(qū)別在于編譯器生成的二進(jìn)制指令數(shù)不同。
在C語言中,a表示a的原值是自增的,但表達(dá)式的值是自增前的值;a表示a的值是自增的,表達(dá)式的值是自增后的值。
從兩者的差異中,我們可以看出主要原因是表達(dá)式的值不同。表達(dá)式的值通常寫入寄存器。當(dāng)然,如果這個(gè)值涉及一些內(nèi)存地址訪問,它也會(huì)被寫回內(nèi)存。
編譯器在生成指令時(shí)會(huì)進(jìn)行一些指令優(yōu)化(當(dāng)然,-O參數(shù)優(yōu)化會(huì)做得更多)。
讓我們舉一個(gè)簡單的例子:
對(duì)于(a=0 a< 1000000 a){}
在這個(gè)例子中,表達(dá)式a的值不支付給其他變量,因此我們不需要表達(dá)式的值。因此,編譯器只需要一條指令就可以將一個(gè)值加到a所在的內(nèi)存區(qū)域的值中。
但是,如果在for中使用a,表達(dá)式的值將不會(huì)得到優(yōu)化(因?yàn)檫@是表達(dá)式的副作用,或者這是表達(dá)式的函數(shù)),盡管a是由1添加的,并且表達(dá)式的值不會(huì)被使用。因此,編譯器將生成更多的指令。首先,將a的值賦給寄存器,然后將內(nèi)存的值加1。
區(qū)別僅存在于一條指令中。但是,如果我們的周期數(shù)非常大,差異會(huì)更明顯。所有者可以在循環(huán)前后添加細(xì)微級(jí)別的時(shí)間戳,以查看這兩種情況下的耗時(shí)差異。
我希望我的答案能對(duì)你有所幫助
這是一種特殊的運(yùn)算符,自增運(yùn)算符和自減運(yùn)算符--對(duì)變量的運(yùn)算結(jié)果是加1和減1。例如--coutercouter--amountamount在這些例子中,運(yùn)算符前后的效果是相同的,它們都是加1或減1,但是當(dāng)它們作為其他表達(dá)式的一部分時(shí),它們之間就有區(qū)別。如果運(yùn)算符放在變量前面,則變量在運(yùn)算之前完成自增或自減運(yùn)算;如果運(yùn)算符放在后面,則在變量參與表達(dá)式運(yùn)算之后執(zhí)行自增和自減運(yùn)算。這可能不是很清楚。讓我們看看下面的例子:num1=4num2=8A=num1b=num2a=num1。一般來說,這是一項(xiàng)任務(wù)。將num1的值賦給a,因?yàn)樽詣?dòng)遞增運(yùn)算符在變量前面,所以num1首先從1增加到5,然后賦給a,最后a也是5。B=num2這是將num2的值賦給B,因?yàn)樽詣?dòng)遞增運(yùn)算符在變量后面,所以首先將num2賦給B,B應(yīng)該是8,然后num2將從1增加到9。那么,我們?nèi)绾螒?yīng)對(duì)這種情況呢?C=num1 num2是C=(num1)num2還是C=num1(num2)取決于編譯器。不同的編譯器可能有不同的結(jié)果。所以我們在今后的編程中應(yīng)該盡量避免上述復(fù)雜的情況。
自增和自減的運(yùn)算方法?
C語言自增自減,i 和 i的區(qū)別?
運(yùn)算符的優(yōu)先級(jí)決定表達(dá)式中的術(shù)語組合。這會(huì)影響表達(dá)式的求值方式。一些運(yùn)算符的優(yōu)先級(jí)比其他運(yùn)算符高,乘法和除法運(yùn)算符的優(yōu)先級(jí)比加法和減法運(yùn)算符的優(yōu)先級(jí)高。例如,x=7,3*2,其中x被分配給13而不是20,因?yàn)檫\(yùn)算符*的優(yōu)先級(jí)高于,所以先乘以3*2,然后再加7。關(guān)聯(lián)性是指具有相同優(yōu)先級(jí)的運(yùn)算符的操作順序。從左到右的操作稱為左組合,從右到左的操作稱為右組合。自增()和自減(-)運(yùn)算符提供了一種方便快捷的方法來實(shí)現(xiàn)1的加減運(yùn)算。它們可以前后使用。到目前為止,我們已經(jīng)使用了預(yù)自動(dòng)遞增運(yùn)算,它使其操作數(shù)加1,運(yùn)算的結(jié)果就是修改后的值。C語言中的運(yùn)算符是用來描述特定操作的符號(hào)。它是構(gòu)造C語言表達(dá)式的工具。C語言的操作非常豐富。除了控制語句和輸入輸出之外,幾乎所有的基本操作都被當(dāng)作操作符來處理。