Solidity
如何在楊樹的 {8||16||32} 位內儲存負值?
我想儲存
-1
在最小的記憶體中,例如 {8||16||32} 位而不是 256 位。int i = -1;
當我返回時
var
,它返回-1L
而不是返回-1
。我已經分配
-1
到一個int8
變數中。據我所知int8
是有符號整數。int8 i = -1;
但是當我返回時
output
,它返回:‘115792089237316195423570985008687907853269984665640564039457584007913129639679L’而不是-1
。$$ Q $$我應該怎麼做才能獲得
-1
? 請注意,我已經嘗試過這個問題populus
:作為契約,我使用了@RichardHorrocks 的契約:
NumTest
在答案上。test.py:
def test_receipt(web3, accounts, chain, unmigrated_chain): my_contract = unmigrated_chain.get_contract('NumTest'); set_txn_hash = my_contract.transact().NumTest(); contract_address = unmigrated_chain.wait.for_receipt(set_txn_hash) output = my_contract.call().number(); print(output);
感謝您寶貴的時間和幫助。
此程式碼
-1
為我返回(對於int8
和int
):pragma solidity ^0.4.6; contract NumTest { int8 i; function NumTest() { i = -1; } function number() constant returns (int8 num) { return i; } }
正如之前的文章中提到的,由於拆包成本,
int8
case(278 gas)實際上比預設int
/int256
case(224 gas)更貴。對於上面的程式碼,為了完整性(因為我很感興趣):
integer bits | gas cost -------------+--------- 8 | 278 16 | 278 32 | 278 64 | 278 128 | 278 248 | 278 256 | 224
因此,對於低於最佳尺寸的任何東西,拆包成本都是相同的。