十进制负数的二进制表示法
程序员文章站
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 字节,每一个 0
或 1
表示一个比特位(bit),所以八位为一字节,好像32位和64位系统都这样。一字节用十进制整数表示大小则是:2的8次方(256)。
表示为十六进制是这样:ff ff ff ff
(f=2^4-1)
二、反码
将二进制原码每一位取反,就是 0
变 1
,1
变 0
。
上面 5 的反码表示为这样:
11111111 11111111 11111111 11111010
三、补码
将反码最低位加 1
叫做补码,那么 5 的补码表示为:
11111111 11111111 11111111 11111011
注意反码末位是
1
时记得进位。
所以十进制数 -5
的二进制表示为:
11111111 11111111 11111111 11111011
所以 -1 在计算机中表示为全 1
,就是:
11111111 11111111 11111111 11111111
我64位计算机中是这样的:
推荐阅读
-
二进制在线转换成文字(二进制转十进制的方法)
-
剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)
-
求大于10的最小二进制八进制十进制回文数字
-
IEEE 二进制浮点数的表示
-
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
-
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
-
用一张表来存储数据状态,并且可以进行多状态精确查询;使用二进制来表示数据状态,并且是可以无顺序的状态;解决使用中间表来存储数据的多状态;数据状态还可以这么玩;
-
c++编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。
-
js封装一个十进制转二进制的函数
-
写一个十进制转二进制的函数