当前位置: 首页 > 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)时,编译器默认处理补码。
  • 位操作(如右移 >>)对负数的行为依赖实现(通常为算术右移,保留符号位)。
http://www.xdnf.cn/news/941725.html

相关文章:

  • 《双指针》题集
  • [特殊字符]01Linux基础入门教程——从起源到核心概念
  • 高等数学 | 第八章-向量值函数的积分与场论
  • JavaScript 语法结构
  • MySQL 索引失效:六大场景与原理剖析
  • 官网Numpy教程
  • leetcode.多数元素
  • 【PhysUnits】17.1 补充数值后量纲系统实现解析 (dimension.rs)
  • 一键压缩图片工具
  • 2000-2020年各省第三产业增加值占GDP比重数据
  • 网络安全基础
  • Python 调用 C 程序时输出顺序错乱问题分析与解决
  • 0x-2-Oracle Linux 9上安装JDK配置环境变量
  • 第五讲 基础IO
  • Go切片与映射的内存优化技巧:实战经验与最佳实践
  • 【LeetCode】算法详解#6 ---除自身以外数组的乘积
  • JUC并发编程(六)CAS无锁实现/原子整数/原子引用/原子数组/字段更新
  • Python训练营---DAY48
  • Java线程安全与同步机制全解析
  • 嵌入式学习笔记 - freeRTOS为什么中断中不能使用互斥量
  • 《最短路(Dijkstra+Heap)》题集
  • MySql读写分离部署(一主一从,双主双从,Mycat)
  • 为什么已经有 Nginx 了,还需要服务网关?
  • 【LUT技术专题】带语义的图像自适应4DLUT
  • Cherry-Studio搭建个人知识库智能体
  • JS的数据类型分类
  • 国产变频器与codesys控制器通信融合方案
  • gitee....
  • SpringSecurity+vue通用权限系统
  • Python环境搭建:pyenv-win的使用指南