欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

十进制负数的二进制表示法

程序员文章站 2022-06-03 12:19:43
...

文章出自个人博客https://knightyun.github.io/2018/04/04/negative-binary,转载请申明


十进制转正整数转二进制应该都会,用C语言代码简单表示算法:

#include<stdio.h>
int main()
{
    int dec=65535; /*positive decimalism number to binary number*/
    int bin[32];
    int i=0, j;
    while (dec>1)
    {
        bin[i]=dec%2;
        dec/=2;
        i++;
    }
    bin[i]=dec;
    for (j=i; j>=0; j--) /*print binary number*/
    {
        printf("%d",bin[j]); 
    }
    printf("\n");
}

当然也有另外一种简单转换方法:

#include<stdio.h>
int main()
{
    int dec=65535;
    char bin[32];
    itoa(dec,bin,2); /*整型转换为字符串的函数,第一个参数是整型变量,
    第二个是字符数组,用于存放字符串,第三个是进制,“2” 表示输出的字符串的进制格式,
    可以这样记函数:“int to arr” */
    printf("%s\n", bin);
}

但是,十进制负整数转换为二进制稍微复杂一些,分为三步:

一、原码

例如一个十进制数 5,二进制原码表示为:

00000000 00000000 00000000 00000101

大小为 4 字节,每一个 01 表示一个比特位(bit),所以八位为一字节,好像32位和64位系统都这样。一字节用十进制整数表示大小则是:2的8次方(256)。
表示为十六进制是这样:ff ff ff ff(f=2^4-1)

二、反码

将二进制原码每一位取反,就是 0110
上面 5 的反码表示为这样:

11111111 11111111 11111111 11111010

三、补码

将反码最低位加 1 叫做补码,那么 5 的补码表示为:

11111111 11111111 11111111 11111011

注意反码末位是 1 时记得进位。

所以十进制数 -5 的二进制表示为:

11111111 11111111 11111111 11111011

所以 -1 在计算机中表示为全 1,就是:

11111111 11111111 11111111 11111111

我64位计算机中是这样的:
十进制负数的二进制表示法


技术文章推送

手机、电脑实用软件分享


十进制负数的二进制表示法

十进制负数的二进制表示法