错误的返回值uint256

2022-01-28 08:00:50 标签 solidity

这个契约没有返回正确的值,出了什么问题?MASK看起来不正确,移位groupid不返回任何东西

 // SPDX-License-Identifier: GPL-3.0
    
    pragma solidity 0.7.6;
    
    /**
     * @title Storage
     * @dev Store & retrieve value in a variable
     */
    contract Storage {
    
    
          uint256 public constant GROUP_MASK = uint256(uint128(~0)) << 128;
    
        /**
         * @dev Store value in variable
         * @param id value to store
         */
        function store(uint256 id)  public view returns (uint256){
            
             uint256 shiftedGroupId = (id & GROUP_MASK);
            uint256 groupId = shiftedGroupId >> 128;
            
            return groupId;
          
        }
 
    }

# # #

uint256 shiftedGroupId = (id & GROUP_MASK);

当id为1时,这一行将值赋给shiftedGroupId

1 & 115792089237316195423570985008687907852929702298719625575994209400481361428480

(一个&符号是“位和”操作符)

这是0。

当你将0移动128个字节(并赋值给groupId)时,它仍然是0。

# # #

contract Storage {
        /**
         * @dev Store value in variable
         * @param id value to store
         */
        uint256 id;
        function store(uint256 _id) public {
               id = _id;
        }
}

这是一个接收东西并将其存储在区块链中的合同。我不明白面具是怎么回事。如果你坚持使用这个口罩,请进一步说明。

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码