当前位置: 首页 > news >正文

有符号和无符号0按位取反的区别

#include <stdio.h> int main() { char a = 0; unsigned char b = 0; a = ~a; b = ~b; printf("The signed 0 is reversed bit by bit:%d\n", a); printf("The unsigned 0 is reversed bit by bit:%d\n", b); return 0; }

为什么?

理解如下解释需掌握:正,负数的源码、反码、补码;有符号数的二进制表示。

1. char a = 0 定义了一个有符号变量 "a",值为 0。0 的补码是 0000 0000(为什么要求0的补码?因为"a"为有符号数,有符号数在CPU计算时一律使用的是补码),然后再按位取反,所以 ~a 表达式计算结果为:1111 1111

现在要用 printf() 函数以十进制输出 ~a,则需知道 1111 1111 的源码是多少,计算 1111 1111 的源码:补码 - 1(1111 1111 - 1) 得 反码 1111 1110,然后符号位不变按位取反得源码 1000 0001

所以定义有符号变量 a = 0, 按位取反后,以十进制打印输出结果为 -1(1000 0001)

2. unsigned char a = 0定义了一个无符号变量"a",值为0。变量"a"按位取反为1111 1111。

所以定义无符号变量 a = 0,按位取反后,以十进制打印输出结果为 255(1111 1111)

本文根据自己掌握的知识理解写出,读者如发现错误请指正,我们共同进步,感谢!!!

http://www.jsqmd.com/news/1121048/

相关文章:

  • 【计算机Java毕业设计案例】基于 Web 的拼车需求智能匹配服务系统的设计与实现 出租车拼车交易监管与行程评价系统(程序+文档+讲解+定制)
  • 后端工程师转型大模型开发:Agent+RAG实战指南
  • VUE项目中安装和使用vant组件
  • BLDC电机FOC控制:A89307驱动与MK64FX512VDC12实现
  • LENA-R8与PIC18F46K80在GNSS定位与低功耗通信中的实践
  • WEF框架:一体化WiFi渗透测试工具的原理与应用实战
  • MLOps实战:构建可观测、弹性、可治理的机器学习生产系统
  • View触摸反馈与事件分发原理
  • 电液伺服系统ADRC控制方案设计与Simulink实现
  • 时空编码超表面在射频计算中的创新应用
  • vue 延迟加载
  • Debian(WSL)安装gprMax教程 - 适用于Windows系统
  • mtgsig 1.2逆向分析:从混淆代码到本地化实现
  • .net6 中 WebAPI 发布后Swagger不显示
  • 野数据处理实战:构建五层韧性物联网数据流水线
  • Gemini 3.1 Pro国内可用的四种实测路径与选型指南
  • 2、<入门>编程求解下列式子的值:S=1+2+3+...+n
  • Java对称加密实战:从AES/DES原理到安全实现与避坑指南
  • CAPL脚本函数不能返回数组的替代方案
  • go:Timing Functions Pattern
  • 三步搞定跨语言障碍:STranslate翻译工具完全指南
  • 融云获 2022 中国技术先锋年度评选「中国技术品牌影响力企业」奖
  • AI开发工程化规范与实践指南
  • 关于const、指针和引用【C++复习】
  • Micro Journal开源硬件设计:3D打印外壳与PCB制作教程
  • 神经网络激活函数实战指南:从原理到工程选型
  • BetterJoy终极指南:让Switch手柄在PC上焕发新生
  • RTX A5000与PIC18LF45K42构建安全云连接方案
  • Springboot整合MybatisPlus【一】
  • 毕业生必备7款AI写作辅助平台,一站式搞定选题初稿与降重