请问如何实现十进制转负二进制,请教我

Zero.hua 2019-05-23 09:29:15
将一个十进制的负数转化为一个负二进制的数,例如-13(10)=110111(-2)
...全文
189 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsktuuytyh 2019-07-14
  • 打赏
  • 举报
回复
-13(base10)=110111(base-2) 注:在负2为基底,(-2)^n为各个数位的权值的负二进制中,11转化为十进制,为-1 解一:易见-13=-16+4-1,故-13(base10tobase-2)=110000+100+11(base-2)=110111 解二:先将13转化,再乘以-1. 13=16-8+4+1=11101(base-2), 故-13=11101*11=111010+11101(base-2), 易见在负二进制中,11+1=0, 1+1=110(base-2), 故(111,010) + (11,101)=(1,010) + (1,101)=110111 解三:先将13转化,再求相反数. 13=16-8+4+1=11101(base-2), 易见在负二进制中,11+1=0,故11101+110111=0,故-13=110111(base-2) 相关:负二进制加法表中的不显然项目: 1+1=110; 11+01=0; 推出: 11+10=(1,1)+(1,0)=(110,1)=1101; 10+10=(110,0)=1110
Zero.hua 2019-05-25
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错的回复:
你转的不对。
没错吧,题目上是这么写的
真相重于对错 2019-05-25
  • 打赏
  • 举报
回复
引用 7 楼 636f6c696e 的回复:
负二进制不是求到2进制后取补码,而是: -13=1 * (-2)^0 + 1 * (-2)^1 + 1 * (-2)^2 + 0 * (-2)^3 + 1 * (-2)^4 + 1 * (-2)^5 所以-13的负二进制是110111 [quote=引用 6 楼 真相重于对错 的回复:] -13 如果存贮在一个字节中。 13的源码 00001101。 负数是用补码表示 按位去反+1 变成 11110011;
[/quote] sorry,我看成2进制了
真相重于对错 2019-05-25
  • 打赏
  • 举报
回复
引用 7 楼 636f6c696e 的回复:
负二进制不是求到2进制后取补码,而是: -13=1 * (-2)^0 + 1 * (-2)^1 + 1 * (-2)^2 + 0 * (-2)^3 + 1 * (-2)^4 + 1 * (-2)^5 所以-13的负二进制是110111 [quote=引用 6 楼 真相重于对错 的回复:] -13 如果存贮在一个字节中。 13的源码 00001101。 负数是用补码表示 按位去反+1 变成 11110011;
[/quote]
636f6c696e 2019-05-25
  • 打赏
  • 举报
回复
负二进制不是求到2进制后取补码,而是: -13=1 * (-2)^0 + 1 * (-2)^1 + 1 * (-2)^2 + 0 * (-2)^3 + 1 * (-2)^4 + 1 * (-2)^5 所以-13的负二进制是110111
引用 6 楼 真相重于对错 的回复:
-13 如果存贮在一个字节中。 13的源码 00001101。 负数是用补码表示 按位去反+1 变成 11110011;
真相重于对错 2019-05-25
  • 打赏
  • 举报
回复
-13 如果存贮在一个字节中。 13的源码 00001101。 负数是用补码表示 按位去反+1 变成 11110011;
636f6c696e 2019-05-25
  • 打赏
  • 举报
回复
参考:https://blog.csdn.net/qq_36924696/article/details/81233519
Zero.hua 2019-05-25
  • 打赏
  • 举报
回复
谢谢各位,我会做了。
六道佩恩 2019-05-25
  • 打赏
  • 举报
回复
二进制没有正负吧,负整数在二进制看来,它之所以为负,是因为有个表示负数的比特位上有了1,所以这个数就被认为是负数。现在有负数的类型有char、short、int、long long,你要将-13(10)转换为110111(-2)是有问题的,也就是你规定了第一个1表示负数,然而你规定的并不行。要转也是转成1111 0011这样的char,或者1111 1111 1111 0011这样的short,或者1111 1111 1111 1111 1111 1111 1111 0011这样的int,或者1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0011这样的long long。至于转二进制的方法,和整型是一样的:

#include "stdio.h" 
void main( void )
{
	unsigned n=0;			//利用unsigned,0xffffffff是可以正常计算的正数
	int m=0;				
	char result[32]={0};	        //保存二进制结果,视你要多少位而定
	printf("十进制:");
	scanf("%d",&n);
	printf("二进制:");
	for( ; n>0 ; n/=2 , m++)
		result[m]=n%2;	
	for(m-- ; m>=0 ; m-- )	//倒序输出
		printf("%d",  result[m]);
}
lin5161678 2019-05-24
  • 打赏
  • 举报
回复
二进制有多种处理方案 源码补码反码说清楚
Italink 2019-05-24
  • 打赏
  • 举报
回复

#include<stdio.h>
int main(){
	int n,result=0;
	int key = 0, count = 1;
	scanf("%d", &n);
	if (n < 0) {
		key = 1;
		n = -n;
	}
	while (n) {
		result += n % 2 * count;
		n /= 2;
		count *= 10;
	}
	if (key) 
		result += count;
	printf("%d", result);
	return 0;
}
真相重于对错 2019-05-24
  • 打赏
  • 举报
回复
你转的不对。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧