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

C语言signed char位运算后printf输出结果为101的原因求解

C语言printf位移运算输出结果解析

相关代码复现:

signed char c=0x10;
printf("%x", c<<0x4|c>>0x4); 

运算过程逐步骤拆解:

  • C语言默认存在整数提升规则:长度小于int的整数类型(比如signed char)在参与位运算、算术运算前,会先隐式转换为int类型再执行运算。
  • 初始值signed char c = 0x10对应的8位二进制为00010000,属于正数,转换为32位int后值为0x00000010,高位全部补0。
  • 执行c << 0x4:0x00000010左移4位,结果为0x00000100。
  • 执行c >> 0x4:signed类型默认采用算术右移,因原值为正数,高位补0,0x00000010右移4位后结果为0x00000001。
  • 执行按位或运算:0x00000100 | 0x00000001的结果为0x00000101,对应的十六进制表示就是101。
  • printf的%x格式符会以无符号十六进制格式输出传入的int值,因此最终打印结果为101。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:02