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

基于算法竞赛的c++编程(23)原码,反码,补码

以下是关于原码、反码、补码的概念及其在C++中的实现方式:

原码

原码是数值的二进制表示形式,最高位为符号位(0表示正,1表示负),其余位表示数值的绝对值。例如:

  • 十进制数 5 的原码为 00000101(8位)。
  • 十进制数 -5 的原码为 10000101(8位)。
#include <bitset>
#include <iostream>
using namespace std;int main() {int num = 5;bitset<8> original(num); // 原码(仅适用于正数)cout << "原码(正数):" << original << endl;
}

反码

反码是对原码的符号位不变、数值位取反得到的结果:

  • 正数的反码与原码相同。
  • 负数的反码是符号位保持为1,数值位按位取反。例如:
    • -5 的原码为 10000101,反码为 11111010
int main() {int num = -5;unsigned int mask = ~0; // 全1掩码bitset<8> ones_complement((unsigned int)(num) ^ (mask >> (32 - 8)));cout << "反码:" << ones_complement << endl;
}

补码

补码是计算机中存储有符号数的标准方式:

  • 正数的补码与原码相同。
  • 负数的补码为反码加1。例如:
    • -5 的反码为 11111010,补码为 11111011
int main() {int num = -5;bitset<8> twos_complement(num);cout << "补码:" << twos_complement << endl;
}

补码的特性

补码的优势在于统一了加减法运算,避免了符号位的特殊处理。例如:

int main() {int a = 5, b = -3;int sum = a + b; // 直接使用补码运算bitset<8> sum_bits(sum);cout << "补码加法结果:" << sum_bits << "(十进制:" << sum << ")" << endl;
}

注意事项

  • 在C++中,直接使用有符号整数类型(如 int)时,编译器默认处理补码。
  • 位操作(如右移 >>)对负数的行为依赖实现(通常为算术右移,保留符号位)。

相关文章:

  • LLMs之MCP:《Evaluation Report on MCP Servers》翻译与解读
  • comfyui 工作流中 图生视频 如何增加视频的长度到5秒
  • CppCon 2015 学习:Large Scale C++ With Modules
  • Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)
  • 0x-2-Oracle Linux 9上安装JDK配置环境变量
  • RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程
  • 03.数据类型
  • 【读论文】OpenAI o3与o4系统模型技术报告解读
  • 基于机器学习的智能故障预测系统:构建与优化
  • Go语言--语法基础5--基本数据类型--输入输出(1)
  • 计算机常用快捷键分类汇总,涵盖 Windows、macOS 以及通用软件场景
  • 20242817李臻-安全文件传输系统-项目验收
  • Android 集成 Firebase 指南
  • Alight Motion汉化版:视频剪辑,轻松上手
  • 基于安卓的文件管理器程序开发研究源码数据库文档
  • surfer15安装
  • web架构4------(nginx常用变量,nginx中英文自动匹配,lnmp网站架构,正向代理,反向代理,负载均衡)
  • 力扣面试150题--课程表
  • 【P2P】直播网络拓扑及编码模式
  • 基于PostGIS的各地级市路网长度统计及Echarts图表可视化实践-以湖南省为例
  • 来个网站吧好人一生平安百度贴吧/推广计划怎么做
  • 江西师范大学两学一做专题网站/skr搜索引擎入口
  • 世界疫情最新消息数据/汕头seo公司
  • 网站建设公司巨头/关键词搜索次数查询
  • 农业网站建设/线上销售渠道有哪些
  • 河北省城乡建设培训网官方网站/成品ppt网站国外