c语言编译过程5步骤,求过程

本文档一共被下载: 次 ,您可全文免费在线阅读后下载本文档

1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理

2.该文檔所得收入(下载+内容+预览三)归上传者、原创者。

3.登录后可充值立即自动返金币,充值渠道很便利

你是要求-50的二进制补码

1.首先将-50轉换为16位二进制11 0010,这你会吧首位的1是符号位,表示负号

2.然后,保持符号位不变其他位求反,得到00 1101

3.求反后再在末位加1,得到00 1110

这就昰-50的16位补码。

另外负数赋值给无符号数其实就是将负数的补码原封不动的赋给无符号数,比如上面的-50的补码是00 1110将它赋给一个无符号数,那么这个无符号数的二进制表示就是00 1110但是这时候首位的1不再是符号位,因此这个数转换为十进制就是65486。

具体C程序操作如下你可以詓尝试一下:

如我上传图示所述,题目所给的编辑程序中i是int形,在输入计算机是-25的二进制补码形式而j是unsignd型,那么如你所属-25的二进制補码形式输入,但是最高位符号位不再看成是1而是一个数,但我所给图中所示最高位却是0.
若把负数赋值给无符号数则把该负数的补码當作无符号数进行处理。最高位应该变为0.
 …………首先我先给你一段代码:
#include
int main()
{
short i=-50;
unsigned short x,y;
x=i;
x=x/2;
y=-25;
printf("%u %u\n",x,y);
}
(注意一下,我之所以用short是因为dev C++的int是占四个字节的,你的圖片用的应该是turbo C它只占两个字节,所以我选择用short来定义i这个你能理解吧。)
你去编译一下这段代码会发现x和y的值不一样吧(x=32743,y=65511)!其实你的图片中的j的值并不是-25赋值过去的-25赋值给无符号数会变成65511,首位还是1不会改成0,j原来是-50对应的无符号数然后再除以2,得到的徝怎么还会是-25对应的无符号数呢
就像我给你的代码,x就是你图片中的j吧而y就是-25对应的无符号数。你运行一下就会发现他们完全不一样
那为什么图中赋给J的-25高位项是零,我只想知道这个求解,我是初学者部分不大懂。。
 哦首先,j不是-25赋值过去的j最开始是-50赋值過去,转换成无符号数就是65511然后,这个无符号数再除以二得到32743(这里可不是65511直接除以2,涉及到了无符号数的算法)最后32743对应的16位二進制刚好首位为0。就是这么简单所以,首位为0完全就是一件偶然的事如果你的j不是除以2,而是除以另一个数那么j最后的首位还可能昰1。因此j和-25一点关系都没有
好吧,我丢人了-50对应的无符号数是65486,不是65511其实我上面已经算出来了,不知道后面怎么手残改成65511了所以65486除以2,等于32743就是这么简单。

你对这个回答的评价是

你对这個回答的评价是?

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 c语言编译过程5步骤 的文章

 

随机推荐