以太坊(九)Solidity數(shù)據(jù)類(lèi)型-整型(Integer)

int/uint:變長(zhǎng)的有符號(hào)無(wú)符號(hào)整型褐奥。變量支持的步長(zhǎng)以8遞增仰挣,支持從uint8uint256,以及int8int256伸蚯。需要注意的是摩渺,uintint默認(rèn)代表的是uint256int256

什么是有符號(hào)整型剂邮,什么是無(wú)符號(hào)整型

無(wú)符號(hào)整型(uint)是計(jì)算機(jī)編程中的一種數(shù)值資料型別摇幻。有符號(hào)整型(int)可以表示任何規(guī)定范圍內(nèi)的整數(shù),無(wú)符號(hào)整型只能表示非負(fù)數(shù)(0及正數(shù))挥萌。

有符號(hào)整型能夠表示負(fù)數(shù)的代價(jià)是其能夠存儲(chǔ)正數(shù)的范圍的縮小绰姻,因?yàn)槠浼s一半的數(shù)值范圍要用來(lái)表示負(fù)數(shù)。如:uint8的存儲(chǔ)范圍為0 ~ 255引瀑,而int8的范圍為-127 ~ 127

如果用二進(jìn)制表示:

  • uint8: 0b00000000 ~ 0b11111111狂芋,每一位都存儲(chǔ)值,范圍為0 ~ 255
  • int80b11111111 ~ ob01111111憨栽,最左一位表示符號(hào)帜矾,1表示負(fù)0表示屑柔,范圍為-127 ~ 127

支持的運(yùn)算符

  • 比較:<=屡萤,<==掸宛,!=灭衷,>=>旁涤,返回值為bool類(lèi)型翔曲。

  • 位運(yùn)算符:&迫像,|,(^異或)瞳遍,(~非)闻妓。

  • 數(shù)學(xué)運(yùn)算:+-掠械,一元運(yùn)算+由缆,*/猾蒂,(%求余)均唉,(**次方),(<<左移)肚菠,(>>右移)舔箭。

Solidity目前沒(méi)有支持double/float,如果是 7/2 會(huì)得到3蚊逢,即無(wú)條件舍去层扶。但如果運(yùn)算符是字面量,則不會(huì)截?cái)?后面會(huì)進(jìn)一步提到)烙荷。另外除0會(huì)拋異常 镜会,我們來(lái)看看下面的這個(gè)例子:

同其它語(yǔ)言一樣,整數(shù)的除法運(yùn)算總是會(huì)被截?cái)?如果是 7/2 會(huì)得到3终抽,即無(wú)條件舍去戳表。

但使用字面量(我的理解其實(shí)就是常量)的方式,var e = 1 / 4的情況昼伴,則不會(huì)截?cái)喟切洹5捎跍y(cè)試時(shí)使用最新0.4.22版本,語(yǔ)言還沒(méi)有實(shí)現(xiàn)定點(diǎn)小數(shù)亩码,故下面的這個(gè)例子會(huì)報(bào)錯(cuò)季率。

pragma solidity ^0.4.0;

contract IntegerTest{
    function get() returns (int){
        int a = 1;
        int b = 4;

        var d = a / b;//0

        var e = 1 / 4;//未截?cái)?        //UnimplementedFeatureError: Not yet implemented - FixedPointType.

        return d;
    }
}

移位

左移位x<<y相當(dāng)于執(zhí)行x * 2**y,右移位x >> y相當(dāng)于執(zhí)行x / 2**y描沟。意味著對(duì)一個(gè)負(fù)數(shù)移位會(huì)保留符號(hào)飒泻。

pragma solidity ^0.4.0;

contract IntegerTest{
    function shift() returns (int, int, int, int){
        var a = -1 << 2;//-4
        var b = -1 >> 2;//0 (這里由于截?cái)鄼C(jī)制,所以不是負(fù)小數(shù)吏廉,而是0)
        var c = 1 << 2;//4
        var d = 1 >> 2;//0
        return (a, b, c, d);
    }
}

異常

除以零或?qū)α闳∧E⒁牛瑢?duì)一個(gè)值移負(fù)數(shù)位會(huì)拋出運(yùn)行時(shí)異常。

pragma solidity ^0.4.0;

contract IntegerTest{
    function exp() {
        uint a = 1;
        uint b = 0;

        //var x = a / b;//VM Exception: invalid opcode

        int c = -1;

        //var y = a >> c;//VM Exception: invalid opcode
    }
}


整數(shù)字面量

整數(shù)字面量席覆,由包含0-9的數(shù)字序列組成史辙,默認(rèn)被解釋成十進(jìn)制。在Solidity中不支持八進(jìn)制,前導(dǎo)0會(huì)被默認(rèn)忽略聊倔,如0100晦毙,會(huì)被認(rèn)為是100

小數(shù)由.組成耙蔑,在他的左邊或右邊至少要包含一個(gè)數(shù)字见妒。如1..1甸陌,1.3均是有效的小數(shù)须揣。

字面量本身支持任意精度,也就是可以不會(huì)運(yùn)算溢出钱豁,或除法截?cái)喑芸ā5?dāng)它被轉(zhuǎn)換成對(duì)應(yīng)的非字面量類(lèi)型,如整數(shù)或小數(shù)牲尺÷牙遥或者將他們與非字面量進(jìn)行運(yùn)算,則不能保證精度了秸谢。

pragma solidity ^0.4.0;

contract IntegerLiteral{
  function integerTest() returns (uint, uint, uint){
    //超出運(yùn)算字長(zhǎng)了
    var i = (2**800 + 1) - 2**800;
    var j = 1/3*3;
    //小數(shù)運(yùn)算
    var k = 0.5*8;
    return (i, j,k);
  }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霹肝,一起剝皮案震驚了整個(gè)濱河市估蹄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沫换,老刑警劉巖臭蚁,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異讯赏,居然都是意外死亡垮兑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)漱挎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)系枪,“玉大人,你說(shuō)我怎么就攤上這事磕谅∷揭” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵膊夹,是天一觀的道長(zhǎng)衬浑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)放刨,這世上最難降的妖魔是什么工秩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上助币,老公的妹妹穿的比我還像新娘浪听。我一直安慰自己,他們只是感情好奠支,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布馋辈。 她就那樣靜靜地躺著,像睡著了一般倍谜。 火紅的嫁衣襯著肌膚如雪迈螟。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,043評(píng)論 1 291
  • 那天尔崔,我揣著相機(jī)與錄音答毫,去河邊找鬼。 笑死季春,一個(gè)胖子當(dāng)著我的面吹牛洗搂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播载弄,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼耘拇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宇攻?” 一聲冷哼從身側(cè)響起惫叛,我...
    開(kāi)封第一講書(shū)人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逞刷,沒(méi)想到半個(gè)月后嘉涌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夸浅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年仑最,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帆喇。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡警医,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坯钦,到底是詐尸還是另有隱情法严,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布葫笼,位于F島的核電站深啤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏路星。R本人自食惡果不足惜溯街,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一诱桂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呈昔,春花似錦挥等、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至郭宝,卻和暖如春辞槐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粘室。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工榄檬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衔统。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓鹿榜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親锦爵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舱殿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容