原码和补码在系统中运行的应用1. 原码、反码与补码2. 加法运算 (10 (-12))3. 减法运算 (10 - (-12))4. 输出时的转换过程总结在学习C的时候遇到了数据过大导致数据溢出的问题让我对数的存储存在疑惑。下面就详细讲讲整数型数据的加减法运行。首先这个属于整数型数据存储在内存中的操作此时数按照二进制的形式存储在内存中。为了统一加减法运算计算机使用补码来存储整数。1. 原码、反码与补码对于一个有符号整数假设为8位其存储转换关系如下数值原码 (Sign-Magnitude)反码 (Ones‘ Complement)补码 (Two’s Complement)100000 10100000 10100000 1010-121000 11001111 00111111 0100转换规则正数原码、反码、补码三者相同。负数原码符号位为1其余位表示绝对值。反码符号位不变原码的数值位按位取反。补码反码 1。2. 加法运算 (10 (-12))系统使用补码进行加法直接对存储的二进制位相加。补码 10: 0000 1010 补码 -12: 1111 0100 ---------------------- 1111 1110 (补码结果)结果分析1111 1110是一个负数的补码。但如果不需要输出就会这样保持在内存中。3. 减法运算 (10 - (-12))系统将减法转化为加法A - B A (-B)。其中-B即对B的补码再求一次补码即得到-B的补码。已知被减数 A 10 补码为0000 1010减数 B -12 补码为1111 0100步骤求-B 因为 B -12 所以 -B 12。求12的补码正数补码即原码0000 1100。执行加法10的补码 12的补码。补码 10: 0000 1010 补码 12: 0000 1100 ---------------------- 0001 0110 (补码结果)结果分析0001 0110是正数补码直接转换为十进制为 22。结果正确10 - (-12) 22。4. 输出时的转换过程当程序需要输出一个整数例如通过printf时运行库如 libc需要将内存中的补码还原为人类可读的十进制形式其实这里又是一个补码的过程。以补码1111 1110(即 -2) 的输出为例读取补码1111 1110(符号位为1是负数)。补码转一次补码补码1111 1110取反0000 0001加1得原码的绝对值0000 0010原码数值位000 0010对应十进制 2。加上负号输出-2。总结通过使用补码表示法计算机系统统一了加法和减法运算只需一个加法器即可完成。理解原码、反码、补码之间的转换关系是理解整数在计算机中如何存储、运算和输出的关键也能帮助我们更好地调试数据溢出等问题。
原码和补码在系统中运行的应用
发布时间:2026/5/25 1:36:25
原码和补码在系统中运行的应用1. 原码、反码与补码2. 加法运算 (10 (-12))3. 减法运算 (10 - (-12))4. 输出时的转换过程总结在学习C的时候遇到了数据过大导致数据溢出的问题让我对数的存储存在疑惑。下面就详细讲讲整数型数据的加减法运行。首先这个属于整数型数据存储在内存中的操作此时数按照二进制的形式存储在内存中。为了统一加减法运算计算机使用补码来存储整数。1. 原码、反码与补码对于一个有符号整数假设为8位其存储转换关系如下数值原码 (Sign-Magnitude)反码 (Ones‘ Complement)补码 (Two’s Complement)100000 10100000 10100000 1010-121000 11001111 00111111 0100转换规则正数原码、反码、补码三者相同。负数原码符号位为1其余位表示绝对值。反码符号位不变原码的数值位按位取反。补码反码 1。2. 加法运算 (10 (-12))系统使用补码进行加法直接对存储的二进制位相加。补码 10: 0000 1010 补码 -12: 1111 0100 ---------------------- 1111 1110 (补码结果)结果分析1111 1110是一个负数的补码。但如果不需要输出就会这样保持在内存中。3. 减法运算 (10 - (-12))系统将减法转化为加法A - B A (-B)。其中-B即对B的补码再求一次补码即得到-B的补码。已知被减数 A 10 补码为0000 1010减数 B -12 补码为1111 0100步骤求-B 因为 B -12 所以 -B 12。求12的补码正数补码即原码0000 1100。执行加法10的补码 12的补码。补码 10: 0000 1010 补码 12: 0000 1100 ---------------------- 0001 0110 (补码结果)结果分析0001 0110是正数补码直接转换为十进制为 22。结果正确10 - (-12) 22。4. 输出时的转换过程当程序需要输出一个整数例如通过printf时运行库如 libc需要将内存中的补码还原为人类可读的十进制形式其实这里又是一个补码的过程。以补码1111 1110(即 -2) 的输出为例读取补码1111 1110(符号位为1是负数)。补码转一次补码补码1111 1110取反0000 0001加1得原码的绝对值0000 0010原码数值位000 0010对应十进制 2。加上负号输出-2。总结通过使用补码表示法计算机系统统一了加法和减法运算只需一个加法器即可完成。理解原码、反码、补码之间的转换关系是理解整数在计算机中如何存储、运算和输出的关键也能帮助我们更好地调试数据溢出等问题。