二进制补码、原码、反码
1. 二进制补码的概念
在计算机中,二进制补码是一种表示有符号整数的编码方式。对于一个固定位数(如8位、16位、32位等)的二进制数,它既能表示正数,也能表示负数。
正数的补码与原码相同。例如,对于8位二进制数,+5的原码和补码都是00000101。
负数的补码计算方法是:先写出该负数绝对值的原码,然后按位取反(0变为1,1变为0),最后加1。例如,-5的绝对值5的原码是00000101,按位取反得到11111010,再加1得到11111011,这就是 -5的补码。
2. 二进制补码的作用
简化硬件电路:计算机中的加法器电路可以同时处理无符号数和有符号数的加法运算,只需要使用一套电路结构。因为在补码表示下,减法可以转换为加法操作。例如,计算5+(-3),在补码中可以表示为5的补码(00000101)加上-3的补码(11111101),结果为00000010,即2。
统一的运算规则:无论是正数还是负数,都可以使用相同的加法和移位等运算规则。在进行有符号数的算术运算时,使用补码可以直接按照无符号数的运算规则进行,然后根据结果的符号位判断最终结果的正负。
3. 补码与原码、反码的关系
原码:原码是一种直观的二进制表示方法,最高位为符号位(0表示正数,1表示负数),其余位表示数值的绝对值。例如,+5的原码是00000101,-5的原码是10000101。原码的缺点是在进行减法运算时,需要根据符号位判断是做加法还是减法,并且还需要考虑符号位的处理,电路实现较为复杂。
反码:正数的反码与原码相同,负数的反码是在原码的基础上,除符号位外,其余各位按位取反。例如,+5的反码是00000101,-5的原码是10000101,反码是11111010。反码在运算时也存在一些问题,例如0有正0(00000000)和负0(11111111)两种表示方式,不够简洁。
补码是在反码的基础上加1得到的,它解决了原码和反码在运算中的一些问题,成为计算机中表示有符号整数的主要方式。
4. 补码的表示范围
对于n位的二进制补码表示的有符号整数,其表示范围是(-2^{n - 1})到(2^{n - 1}-1)。例如,对于8位二进制补码,范围是 -128(10000000)到127(01111111)。
C++编程语言基础
- C++:从入门到工作的教程
- 这是我的第一个 C++程序!
- C++中main函数有什么作用?
- C++中 #include 指令的作用
- C++中常用的预处理指令
- C++中 iostream 头文件定义了什么
- C++名称空间(namespace)
- C++标准库中 std 命名空间定义了些什么
- C++常用的头文件
- C++源代码的发布方式
- C++变量名的定义、变量的作用、使用规范
- C++的关键字列表
- C++数据类型:整型(整数类型)
- 二进制补码、原码、反码
- C++数据类型:char字符型(整数类型)
- ASCII码表及C++字符函数库(cctype)
- 计算机汉字编码
- C++数据类型:bool类型(整数类型)
- C++中 const 限定符
- C++数据类型:浮点数
- C++运算符:算术运算符
- C++运算符:类型转换规则
- 计算机数据存储大小端模式
- C++运算符:位运算 与 bitset类库
- C++运算符:关系运算符与逻辑运算符
- C++流程控制:顺序、选择、循环、跳转语句
- C++函数的定义、参数传递、重载、嵌套
- C++数组:一维、二维、多维数组的运用
- C-style字符串、库函数 与 std::string对象
- C++数据类型:结构体(struct)
- C++数据类型:联合体(union)
- C++数据类型:枚举(enum)
- C++数据类型别名:typedef
- C++指针
- C++内存操作符:new分配 与 delete释放
- C++标准模板库(STL)容器、算法、迭代器
- C++标准模板库(STL)vector顺序容器
- C++标准模板库(STL)array固定容器
- C++标准模板库(STL)list双向链表容器
- C++标准模板库(STL)deque双端队列
- C++标准模板库(STL)集合 set 关联容器
- C++标准模板库(STL)map关联容器
- C++标准模板库(STL)unordered_set
- C++标准模板库(STL)unordered_map
- C++标准模板库(STL)algorithm算法库
- C++文件操作
- C++数学库(cmath)数学常量与数学函数
- C++模板:函数模板、类模板
- C++与SQLite3联合打造实用的应用程序
- C++实战开发中常用的库(概述)
- 第二部分:C++面向对象编程
- C++:类的定义与声明、类对象应用
- 第三部分:数据结构与算法(概述)
- 第一部分:C++语言简介与学习路线