- (꒪ꇴ꒪(꒪ꇴ꒪ ),hello我是祐言
 - 博客主页:C语言基础,Linux基础,软件配置领域博主🌍
 - 快上🚘,一起学习!
 - 送给读者的一句鸡汤🤔:
 - 集中起来的意志可以击穿顽石!
 - 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏
 
一、认识原码反码补码
原码、补码和反码是用来表示有符号整数的三种表示方法,它们在计算机中常用于进行数值运算和存储。
1.原码(Sign-Magnitude Representation)
        最高位为符号位(0 表示正数,1 表示负数),其余位表示数值部分。
         例如,正数 +5 的原码为 00000101,负数 -5 的原码为 10000101。
 2.反码(One's Complement Representation)
 
        正数的反码与其原码相同。
         负数的反码是将其原码中除符号位外的每一位取反(0 变为 1,1 变为 0)。
         例如,正数 +5 的反码为 00000101,负数 -5 的反码为 11111010。
 3.补码(Two's Complement Representation)
 
        正数的补码与其原码相同。
         负数的补码是在其反码的基础上加 1。
         这里要注意一点:补码的最高位仍然表示符号位。
         例如,正数 +5 的补码为 00000101,负数 -5 的补码为 11111011。
二、计算机中补码表示法特点
 
 
- 可以同时表示正数和负数,且不需要额外的符号位,简化了数值运算和逻辑判断。
 - 补码的加法和减法操作可以使用相同的硬件电路,简化了计算机的设计。
 - 补码的溢出操作符合模运算的性质。
 
在进行原码、反码和补码之间的转换时,需要注意以下几点:
        (1)由于负数的补码是在其反码的基础上加 1,所以对于负数,要先将其转换为反码,然后再加 1 得到补码。
         (2)对于补码,将其减 1 可以得到其反码,再将反码的每一位取反可以得到原码。
         (3)这些表示法的选择取决于具体的应用和计算机系统的设计,补码表示法是最常用的一种,因为它简化了数值运算和编码逻辑,且可以有效地处理负数溢出。
示例展示:
 

程序:
#include <stdio.h>
// 原码转换为反码
int originalToComplement(int original) {
    if (original >= 0) {
        return original;
    } else {
        return ~original;
    }
}
// 反码转换为原码
int complementToOriginal(int complement) {
    if (complement >= 0) {
        return complement;
    } else {
        return ~complement;
    }
}
// 原码转换为补码
int originalToTwosComplement(int original) {
    if (original >= 0) {
        return original;
    } else {
        return ~original + 1;
    }
}
// 补码转换为原码
int twosComplementToOriginal(int twosComplement) {
    if (twosComplement >= 0) {
        return twosComplement;
    } else {
        return ~twosComplement + 1;
    }
}
int main() {
    int num = -5;
    int complement = originalToComplement(num);
    int original = complementToOriginal(complement);
    int twosComplement = originalToTwosComplement(num);
    int originalFromTwosComplement = twosComplementToOriginal(twosComplement);
    printf("原码:%d\n", num);
    printf("反码:%d\n", complement);
    printf("补码:%d\n", twosComplement);
    printf("从补码转换回原码:%d\n", originalFromTwosComplement);
    return 0;
}
 
 
📢写在最后
- 今天的分享就到这啦~
 - 觉得博主写的还不错的烦劳 
一键三连喔~ - 🎉感谢关注
 


















