ホーム>source
function shift(int val) returns(int) {
    int res;
    assembly {
        let m := mload(0x40)
        mstore(m, shl(2, val))
        mstore(0x40, add(m, 0x20))
        res := mload(m)
    }
    return res;
}

ドキュメンテーション shl(x、y)// xビットだけ左に論理シフト

結果は常に0です。 testrPCでは、まったく機能しません。

Gethバージョン:1.8.10-stable OS:ubuntu 16.04 Goバージョン:1.9.2

あなたの答え
  • 解決した方法 # 1

    コードをコンパイルすると、次の警告が表示されます。

    browser/Untitled3.sol:8:23: Warning: The "shl" instruction is only available for
    Constantinople-compatible VMs. You are currently compiling for "byzantium", where it will
    be interpreted as an invalid instruction.
                mstore(m, shl(2, val))
                          ^---------^
    
    

    この命令をコンスタンチノープルフォークに追加する計画があるようですが、まだ実行されていません:https://github.com/ethereum/EIPs/issues/145。今のところ、そのようなオペコードは存在しません。

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ linux - cronjobスクリプトでユーザー入力を与える方法