Solidity

如何在楊樹的 {8||16||32} 位內儲存負值?

  • February 21, 2017

我想儲存-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為我返回(對於int8int):

pragma solidity ^0.4.6;

contract NumTest {

   int8 i;

   function NumTest() {
       i = -1;
   }

   function number() constant returns (int8 num) {
       return i;    
   }
}

正如之前的文章中提到的,由於拆包成本int8case(278 gas)實際上比預設int/ int256case(224 gas)更貴。

對於上面的程式碼,為了完整性(因為我很感興趣):

integer bits | gas cost
-------------+---------
    8       |   278
   16       |   278
   32       |   278
   64       |   278
  128       |   278
  248       |   278
  256       |   224

因此,對於低於最佳尺寸的任何東西,拆包成本都是相同的。

引用自:https://ethereum.stackexchange.com/questions/12297