码迷,mamicode.com
首页 > 其他好文 > 详细

整型数补码原码

时间:2014-08-27 12:20:27      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   for   ar   2014   div   log   

#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\n",number,binary); 
    TrueForm(binary,number); 
    printf("%d 的原码: %s\n",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); 
}

bubuko.com,布布扣

bubuko.com,布布扣

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

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

整型数补码原码

标签:style   blog   http   color   for   ar   2014   div   log   

原文地址:http://www.cnblogs.com/Yogurshine/p/3938897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!