整型数补码原码

#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);
}

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

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

时间: 2024-08-27 19:20:17

整型数补码原码的相关文章

【C/C++学院】0725-内存补码分析/补码原码实战/打印整数二进制数据/静态库说明

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. 内存补码分析 #include<stdio.h> #include<stdlib.h> void main3() { //printf

进制知识点概要 补码原码反码

正数的补码反码原码一样 负数的反码是除去符号位,其它位取反 负数的补码是反码+1 补码求补码得到原码 补码求反码再求补码得到原码 无论正数负数,在内存中都是以补码的形式存储的 1.进制 进制也就是进位制,是人们规定的一种进位方法.对于任何一种进制-x进制,就表示某一位置上的数运算时就是逢x进一位. 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一 计算机中采用二进制.十六进制只是计算机常用的一种编码方式 二进制的四位相当于十六进制的一位 二进制的三位相当于八进制的一位 N进制转换为十进

补码原码反码

1)数值数据的表示          我们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值.机器数有固定的位数,具体是多少位与机器有关,通常是8位或16位.机器数把真值的符号数字化,通常用最高位表示符号,0表示正,1表示负.例如,假设机器数为8位,最高位是符号位,那么在定点整数的情况下,00101110和10010011的真值分别为十进制数+46和-19.    (2)原码:     一个整数的原码是指:符号位用0或1表示,0表示正,1表示负,数值部分就是该整数的绝对值的

黑马程序员---C基础6【#include指令】【模块化编程】【计算机的进制】【原码、反码、补码】【位运算符】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [#include指令] 1.文件包含命令的格式: 1)#include “”双引号是包含用户自己书写定义的文件(可以是头文件,也可以是普通的文件)#include是预处理指令,不是一个语句,不需要加封号 2)#include<>   包含一个系统(编译器自带)的头文件 2.文件包含的实质: 把指定文件内容插入该命令行位置取代该命令行, include不一定非要写在第一行: 3.includ

C语言 原码--反码--补码

//原码,反码,补码 #include<stdio.h> #include<stdlib.h> //数值的表示方法——原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数:符号位为1,其余位对原码取反 //补码: //正数:原码.反码.补码相同 //负数:最高位为1,其余位为原码取反,再对整个数加1 // // //在计算机系统中,数值一律用补码来表示(存储). //主要原因:使用补码,可以将符号位和其它位统一处理:

负数的原码和反码,补码

正数的原码,补码,反码 相同,  正数用原码表示,负数用补码表示,负数用如果也用原码表示,表示范围就只有255个数  -128无法表示. 数据的取值范围 byte类型的取值范围:有符号的[-128,127] 无符号的[0,255] 对于有符号的数据类型来说:最高位为符号位 0 为正数,1为负数 例如:5 表示为 0000 0101 -5表示为( 原码):1000 0101 ===>  反码 :1111 1010  ===>  补码:1111 1011 -128 的原码,反码,补码: -128 

OC成长之路 &lt;一&gt; 位运算符、枚举、(原码,补码,反码)、以及NSInteger,NSUInteger,int的区别

引言: 咳咳,首先我是一枚资深小白(资深小白- -.也太衰),这个博客是自己用来记录迷糊犯二的东西. 最近发现难道是因为老了么(我明明18....),很多东西,脑子已经不记得了,迷迷糊糊,概念理论的东西脑子里面七零八落. 从一个知识点跳到另一个知识点,简直是连环事故. ??sad. 傲娇的我不服,决心要认认真真做好笔记,记录期间遇见的种种. 生活要有仪式感,学习应该也是要这样,作为Chapter 1 ,应该要起个好名字. 想了几十分钟,还是随便一些吧. 那就叫: OC成长之路 okok,来开始今

java基础:原码反码补码

计算机在操作的时候,都是采用数据对应二进制的补码来计算的: 原码 反码 补码 原码:用原码,反码,补码来分别表示+7,和-7. 首先得到7的二进制:111

C语言基础(4)-原码,反码,补码及sizeof关键字

1. 原码 +7的原码是0000 0111 -7的原码是1000 0111 +0的原码是0000 0000 -0的原码是1000 0000 2. 反码 一个数如果值为正,那么反码和原码相同. 一个数如果为负,那么符号位为1,其他各位与原码相反 +7的反码0000 0111 -7的反码1111 1000 -0的反码1111 1111 3. 补码 原码和反码都不利于计算机的运算,如:原码表示的7和-7相加,还需要判断符号位. 正数:原码,反码补码都相同 负数:最高位为1,其余各位原码取反,最后对整个