99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

操作符

2022-05-12 17:01 更新

即使兩個(gè)操作數(shù)的類型不同,也可以應(yīng)用算術(shù)和位運(yùn)算符。例如,您可以計(jì)算:y = x + z,其中x是 uint8并且z類型為int32。在這些情況下,將使用以下機(jī)制來確定計(jì)算運(yùn)算的類型(這在溢出的情況下很重要)和運(yùn)算符結(jié)果的類型:

  1. 如果右操作數(shù)的類型可以隱式轉(zhuǎn)換為左操作數(shù)的類型,則使用左操作數(shù)的類型,
  2. 如果左操作數(shù)的類型可以隱式轉(zhuǎn)換為右操作數(shù)的類型,則使用右操作數(shù)的類型,
  3. 否則,該操作是不允許的。

如果其中一個(gè)操作數(shù)是文字?jǐn)?shù)字,則首先將其轉(zhuǎn)換為其“移動(dòng)類型”,這是可以保存該值的最小類型(相同位寬的無符號(hào)類型被認(rèn)為比有符號(hào)類型“更小”) . 如果兩者都是文字?jǐn)?shù)字,則以任意精度計(jì)算操作。

運(yùn)算符的結(jié)果類型與執(zhí)行運(yùn)算的類型相同,但結(jié)果始終為? bool?的比較運(yùn)算符除外。

運(yùn)算符**(取冪),<< 并>>使用左操作數(shù)的類型進(jìn)行運(yùn)算和結(jié)果。

三元運(yùn)算符

三元運(yùn)算符用于?<expression> ? <trueExpression> : <falseExpression>? 形式的表達(dá)式。它根據(jù) main <expression>的評(píng)估結(jié)果評(píng)估后兩個(gè)給定表達(dá)式之一。如果評(píng)估為true,則將被評(píng)估<trueExpression>,否則將被評(píng)估<falseExpression>。

三元運(yùn)算符的結(jié)果沒有有理數(shù)類型,即使它的所有操作數(shù)都是有理數(shù)文字。結(jié)果類型由兩個(gè)操作數(shù)的類型以與上述相同的方式確定,如果需要,首先轉(zhuǎn)換為它們的移動(dòng)類型。

結(jié)果,將由于算術(shù)溢出而恢復(fù)。原因是is of type ,它也強(qiáng)制執(zhí)行加法,并且 256 超出了該類型允許的范圍。255 + (true ? 1 : 0)(true ? 1 : 0)uint8uint8

另一個(gè)結(jié)果是表達(dá)式 like是有效的,但不是。這是因?yàn)榍罢呤且粋€(gè)無限精確計(jì)算的有理表達(dá)式,只有它的最終值才重要。后者涉及將小數(shù)有理數(shù)轉(zhuǎn)換為整數(shù),目前是不允許的。1.5 + 1.51.5 + (true ? 1.5 : 2.5)

復(fù)合和遞增/遞減運(yùn)算符

如果a是一個(gè) LValue(即一個(gè)變量或可以賦值的東西),以下運(yùn)算符可用作簡(jiǎn)寫:

a += e相當(dāng)于。運(yùn)算符, , , , , , ,和相應(yīng)定義。和等價(jià)于/但表達(dá)式本身仍然具有. 反之,和有同樣的效果,但返回改變后的值。a = a + e-=*=/=%=|=&=^=<<=>>=a++a--a += 1a -= 1a--a++aa

刪除

delete a將類型的初始值分配給a。即對(duì)于整數(shù),它等價(jià)于,但它也可用于數(shù)組,其中它分配長(zhǎng)度為零的動(dòng)態(tài)數(shù)組或相同長(zhǎng)度的靜態(tài)數(shù)組,所有元素都設(shè)置為其初始值。刪除數(shù)組索引處的項(xiàng)目,并保留所有其他元素和數(shù)組的長(zhǎng)度不變。這尤其意味著它會(huì)在陣列中留下空隙。如果您打算刪除項(xiàng)目,映射可能是更好的選擇。a = 0delete a[x]x

對(duì)于結(jié)構(gòu),它分配一個(gè)所有成員都重置的結(jié)構(gòu)。換句話說,aafter的值與在沒有賦值的情況下聲明if 的值相同,但需要注意以下幾點(diǎn):delete aa

delete對(duì)映射沒有影響(因?yàn)橛成涞逆I可能是任意的并且通常是未知的)。因此,如果您刪除一個(gè)結(jié)構(gòu),它將重置所有不是映射的成員,并且還會(huì)遞歸到成員中,除非它們是映射。但是,可以刪除單個(gè)鍵及其映射的內(nèi)容:如果a是映射,則將刪除存儲(chǔ)在的值。delete a[x]x

需要注意的是,它的行為實(shí)際上類似于對(duì) 的賦值,即它在 中存儲(chǔ)了一個(gè)新對(duì)象。當(dāng)引用變量時(shí),這種區(qū)別是可見的:它只會(huì)重置自己,而不是之前引用的值。delete aaaaa

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;

contract DeleteExample {
    uint data;
    uint[] dataArray;

    function f() public {
        uint x = data;
        delete x; // sets x to 0, does not affect data
        delete data; // sets data to 0, does not affect x
        uint[] storage y = dataArray;
        delete dataArray; // this sets dataArray.length to zero, but as uint[] is a complex object, also
        // y is affected which is an alias to the storage object
        // On the other hand: "delete y" is not valid, as assignments to local variables
        // referencing storage objects can only be made from existing storage objects.
        assert(y.length == 0);
    }
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)