当前位置: 首页 > 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.gsyq.cn/news/1633024.html

相关文章:

  • Windows 开启 IIS 服务
  • MLOps实战:构建可观测、弹性、可治理的机器学习生产系统
  • 野数据处理实战:构建五层韧性物联网数据流水线
  • 关于const、指针和引用【C++复习】
  • CAPL脚本函数不能返回数组的替代方案
  • 三步搞定跨语言障碍:STranslate翻译工具完全指南
  • Springboot整合MybatisPlus【一】
  • 赞赞赞!融云收获行业媒体「组团打 Call」
  • Elm-platform项目管理指南:使用elm-package管理依赖和发布包
  • STM32F107VC与A89307的BLDC电机FOC控制方案详解
  • 3个平台限制下的架构突破:猫抓项目的技术演进启示
  • 10分钟上手NoDock:Node.js开发者必备的Docker容器化解决方案
  • Scarab:让空洞骑士模组管理变得直观简单的跨平台解决方案
  • 酷睿Ultra X9 388H架构解析与性能实测
  • YOLO26实战:从环境搭建到自定义训练的全流程避坑指南
  • gprMax devel分支中的重构:从过程式仿真程序到分层科学计算框架
  • 如何高效提取Wallpaper Engine资源:专业逆向工具的完整指南
  • Slash实战案例:从代码示例到真实项目,教你如何优雅实现复杂富文本界面
  • 省时省力!德国宣誓翻译驾照认证件去哪办?24小时出件全攻略
  • MZmine 3终极指南:如何免费快速处理质谱数据的完整解决方案
  • DocStrap社区贡献指南:如何参与项目开发与问题修复
  • cdc同步工具
  • Tabled API集成指南:如何将表格提取功能嵌入到你的应用中
  • AI大模型驱动自动化测试:从原理到落地的全链路实践指南
  • 【Java课程设计/毕业设计】基于 SpringBoot 的数字科技风险报告管理系统的设计与实现智能化科技风险报告编制与溯源管理系统【附源码、数据库、万字文档】
  • Micro Journal Rev.7电子墨水屏版本:护眼写作的革命性突破
  • 融云「北极星」数据监控平台:数据可视通晓全局,精准分析定位问题
  • Instatic媒体批量上传:拖放功能与进度监控的终极指南
  • 陶瓷基板在PCB设计中的核心价值与应用解析
  • postcss-write-svg与构建工具集成:Gulp/Grunt/PostCSS配置教程