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

C语言中signed char赋值01234的输出结果疑问求助

C语言代码问题解析

1. 字面量01234的本质

C语言规定:以0开头的数字字面量是八进制整数,不是十进制,也不是字符序列。
将八进制01234转换为十进制:
1×8³ + 2×8² + 3×8¹ + 4×8⁰ = 512 + 128 + 24 + 4 = 668

2. signed char赋值的截断规则

signed char是1字节(8位)有符号整数,取值范围为-128~127。当赋值的数值超出范围时,会仅保留二进制的低8位,高位直接丢弃:

  • 十进制668的二进制为1010011100(共10位)
  • 截断低8位后得到10011100
  • 这是8位补码,最高位为1表示负数,转换为十进制:取反加1得到原码01100100(十进制100),因此最终x = -100

3. ~x的计算过程

按位取反操作~执行时,会先触发整数提升:将signed char类型的x提升为int类型(通常32位):

  • x = -100对应的32位补码为0xFFFFFF9C
  • 按位取反后得到0x00000063,转换为十进制就是99

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:25:15