• 整型数补码原码


    #define MAX 32 
    
    void IntToBinary(char binary[], int x);  // x转换为二进制 
    void IntToBinary2(char binary[], int x); // 不同的思路可以有多种方法 
    void TrueForm(char binary[], int x);    // 获得x的原码 
    void RadixMinus(char binary[], int x);  // 获得x的反码 
    void Complement(char binary[], int x);  // 获得x的补码 
    
    void main() 
    { 
        char binary[MAX+1] = {0}; 
        int number; 
        printf("输入要测试的整型:"); 
        scanf("%d",&number); 
        IntToBinary2(binary,number); 
        printf("%d 的二进制表示: %s
    ",number,binary); 
        TrueForm(binary,number); 
        printf("%d 的原码: %s
    ",number,binary); 
    
    } 
    
    void IntToBinary(char binary[], int x) // 由高位到低位转换 
    { 
        for(unsigned int i = 0x80000000, j = 0; i > 0; i >>= 1) 
        { 
            binary[j++] = x & i ? '1':'0'; 
        } 
    } 
    
    void IntToBinary2(char binary[], int x) // 由低位到高位转换 
    { 
        for(int j = MAX-1; j >= 0; --j) 
        { 
            binary[j] = (x & 1) + '0'; 
            x >>= 1; 
        } 
    } 
    
    void TrueForm(char binary[], int x) // 对于负数,计算机存储的是补码 
    { 
        if(x >= 0) 
        { 
            IntToBinary(binary,x); 
        }else 
        { 
            IntToBinary(binary,(1<<(MAX-1))-x); // 由原码数学公式得 | 1<<n <=> 2^n 
        } 
    } 
    
    void RadixMinus(char binary[], int x) 
    { 
        if(x >= 0) 
        { 
            IntToBinary(binary,x); 
        }else 
        { 
            IntToBinary(binary,x-1);  // 计算机存储的是补码,负数的反码等于补码减一 
        } 
    } 
    
    void Complement(char binary[], int x) 
    { 
        IntToBinary(binary,x); 
    }

    上面的程序IntToBinary就是把内存结构用字符串表示出来。这样可以看出整数负数都是用补码表示的。

    int一般在内存中按补码存储,整数补码和原码相同,负数原码=2(n-1次方)-补码

  • 相关阅读:
    asp.net mvc 从数据库中读取图片
    给折腾ramdisk的朋友们一点建议
    docker安装Jenkins和构建python容器
    docker笔记
    接口加密方式
    Dockerfile常用命令
    北斗七星小队团队展示
    固件程序设计实验内容1.4
    Myod实验 20181328祝维卿
    电子公文系统团队作业(四):描述设计
  • 原文地址:https://www.cnblogs.com/Yogurshine/p/3938897.html
Copyright © 2020-2023  润新知