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

C语言中无符号短整型与无符号字符型按位运算及类型转换问题

C语言中unsigned short与unsigned char的按位操作规则

在C语言的按位运算里,首先会触发整数提升机制:当不同宽度的无符号整数参与运算时,宽度更小的类型会被自动提升为宽度更大的同系列类型。

拿你给出的代码举例:

unsigned char mask1 = 0x55; //01010101
unsigned short int mask2 = 0x8055;//1000000001010101   
unsigned short int res = 0; //0000000000000000
res = mask1 | mask2;
  • mask1是unsigned char(1字节),会被提升为unsigned short(2字节),提升时高位的空位会补0,也就是变成二进制0000000001010101(十六进制0x0055)。
  • 随后提升后的mask1和mask2执行按位或|操作,按位或的逻辑是对应位只要有一个为1,结果位就为1,运算过程完全和你描述的一致:
0000000001010101
| 1000000001010101
  ----------------
  1000000001010101

最终res的二进制值就是1000000001010101,对应十六进制0x8055。

核心要点

  • 无符号窄类型参与运算时,会被提升为更宽的无符号类型,高位统一补0(无符号类型没有符号位,所以补0而非符号位)。
  • 按位操作是在提升后的同宽度类型上执行的,运算结果的类型也与提升后的类型一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:15