使用另一个 uint 类型调用函数

Call function with another uint type

我想知道当我调用一个通常使用 uint256 作为参数但使用另一个 uint 类型的函数时,幕后发生了什么,例如 uint8.

我的印象是没有错误。

例如:

function sqrt(uint256 y) public pure returns (uint256) {
    if (y > 3) {
        uint256 z = y;
        uint256 x = y / 2 + 1;
        while (x < z) {
            z = x;
            x = (y / x + x) / 2;
        }
        return z;
    } else if (y != 0) {
        return 1;
    } else {
        return 0;
    }
}

function sqrtTest(uint8 y) public pure returns (uint256) {
    return sqrt(y);
} 

在这里,当我用 4 调用 sqrtTest 时,它起作用了。

为什么我应该避免这种类型的操作?

当您将输入 uint256 参数类型替换为更小的参数类型时,该函数将只接受该类型的最大值。

示例:

function sqrt(uint8 y) public pure returns (uint256) {

uint8的最大值是255

当您尝试传递 256 时,函数调用会抛出 out-of-bounds 异常。由于未处理此异常,调用将恢复。