You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity中signed/unsigned integer定义疑问:无符号整数能否存负数?

Solidity无符号整数能否存储负数?

你看到的这段Packt书籍内容是错误的,Solidity中的无符号整数(uint系列类型,如uint256)完全不能存储负数,原因如下:

  • Solidity整数类型的明确定义

    • 有符号整数(int系列,如int256):采用补码编码,可表示范围为-2^(n-1)到2^(n-1)-1,确实支持正负值存储。
    • 无符号整数(uint系列):仅能表示非负整数,范围是0到2^n -1,没有任何机制可以存储负数。
  • 关于“溢出导致负数”的误区
    早期Solidity(0.8.0版本之前)未默认启用溢出检查,若对无符号整数执行下溢操作(如uint256(0) - 1),数值会绕回到2^256 - 1——这是一个极大的正数,并非负数。只是该值的二进制补码形式与有符号整数的-1一致,但无符号类型不会将其解析为负数。
    0.8.0及以上版本中,这类溢出操作会直接触发交易回滚,不会产生任何异常数值。

  • 代码验证
    尝试直接给无符号整数赋值负数,编译阶段就会报错:

    // 编译报错:TypeError: Type int_const -1 is not implicitly convertible to expected type uint256.
    uint256 num = -1;
    

总结:书籍中关于无符号整数可存储负数的描述是笔误或概念错误,Solidity的无符号整数只能存储0和正数。

内容的提问来源于stack exchange,提问作者mario7111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:20:30