萌新求问,为什么负数加上2147483647 + 1后算二进制得出的数刚好就是负数的补码? 5

packageC1;importjava.util.Scanner;publicclassword01{publicstaticvoidtwo(inti){if(i==0... package C1;

import java.util.Scanner;

public class word01 {
public static void two(int i){
if (i == 0) {
return;
}
two(i / 2);
System.out.print(i % 2);
}
public static void main (String[] args) throws java.lang.Exception{
Scanner input=new Scanner(System.in);
String num;
System.out.print("请输入一个整数:");
if(input.hasNextInt()){
num=input.next();
int i=Integer.parseInt(num);
if (i > 0) two(i);
if (i == 0) System.out.print(0);
if (i < 0) two(i + 2147483647 + 1);
}else {
System.out.print("输入错误!");
}
}

}
这是我写程序的代码,为什么负数加上2147483647 + 1后算二进制得出的数刚好就是负数的补码?也就是这行代码if (i < 0) two(i + 2147483647 + 1);
搞不懂呀
展开
 我来答
问下问题002
2019-11-15 · TA获得超过222个赞
知道小有建树答主
回答量:89
采纳率:81%
帮助的人:54.8万
展开全部

先说结论:

对一个正数加上2147483647 + 1后得到的是这个数的相反数的原码,而不是负数的补码。

对一个负数加上2147483647 + 1后得到的是无意义的数字。

c语言验证如下:

输出值:

2147483642

(结果为原码,由于c语言采用的补码,所以输出的是乱的)

理论论证如下:

将2147483647转换为二进制后:

发现有31个1,再+1后就是1后面31个0.也就是x=10000000000.......0000000(一共有31个0)。

从此猜测出你的变量为32位有符号int类型。其中最高位是符号位。

假设

x=2147483647 + 1

一个32位int加上x后最高位1变成0,0变成1(若有进位,则会发生溢出丢弃)。相当于对最高位(也就是符号位)取反。

也就是取相反数的操作。而且没有补码的操作。

若原始数据为负数,因为负数内存存放的本来就是补码,若仅仅改变符号位,则变成正数,但是正数c语言认为补码就是原码,不会将补码转换为原码,故输出为乱码。

l7722526
2019-11-15 · TA获得超过2.7万个赞
知道大有可为答主
回答量:2.8万
采纳率:84%
帮助的人:3830万
展开全部
其实说简单点,+1的原因就是为了有符号数多出一个数的编码,并且消除了+0与-0的表示。
如果不+1,8bits的编码只能表示-127 ~ 127,而出现+0与-0的编码,即00000000与10000000。
如果+1后,8bits的编码能够表示-128 ~ 127,并且0只有00000000一种表示,而10000000则表示-128。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tekky_cn
2019-11-15
知道答主
回答量:13
采纳率:40%
帮助的人:6.1万
展开全部

求补码不就是按位求反再加一,2³¹- 1 = 2147483647,一个负数加上它不就是取反吗

详细见下图,望采纳哦~

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2019-11-15 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:811万
展开全部
2147483647加上1好像是0x80000000吧 这正好是负数的符号位 效果类似于tWo(-i)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式