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
相关产品推荐
相关产品推荐

