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

C语言~运算符及~0的编译器求值疑问(K&R习题相关)

关于C语言中~运算符及相关输出差异的解释

运算符~的作用

~是C语言里的按位取反运算符,作用是把操作数的每一位二进制数翻转:0变1,1变0。它直接对内存中的二进制位操作,不是简单的数值取反(比如把5变成-5这种逻辑)。

为什么printf("%u", (unsigned char)~0);输出255

  • 系统里默认0是int类型(一般为4字节32位),二进制全为0。
  • 执行~0后,32位二进制全变成1,对应数值为4294967295,但这里做了(unsigned char)强制转换。unsigned char是8位无符号类型,只会保留低8位的全1,高位直接舍弃。
  • 8位全1的无符号数换算成十进制就是255,用%u(无符号整数格式符)输出自然就是这个结果。

为什么printf("%u\n", ~0);输出4294967295

  • 同样,0作为int类型,~0得到32位全1的二进制数。这个数作为int类型是负数(补码表示下为-1),但%u是无符号整数的输出格式,会把这32位二进制数直接当作无符号数解析,32位全1对应的无符号十进制就是4294967295,因此输出该结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:52:50