这个契约没有返回正确的值,出了什么问题?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;
}
}
这是一个接收东西并将其存储在区块链中的合同。我不明白面具是怎么回事。如果你坚持使用这个口罩,请进一步说明。