符号数和二者的互补

来源:互联网 发布:东芝2303am网络设置 编辑:程序博客网 时间:2024/04/30 13:45
(注意你的号码可能略有不同)
程序开始调用main()。main()称calla(),即callb(),即callc()。您可以双击“调用堆栈”窗口中的各种行,以查看调用函数的更多信息。一些思想直接把你的函数调用。视觉工作室2005快车带你到下一行后的函数调用。继续前进,尝试这个功能。当您准备好恢复通过您的代码的时候,双击调用堆栈窗口的顶部行,您将返回到您的执行点。

继续运行你的程序。断点应该被打一次,callc()称为一次(这一次,从calla())。你应该看到这个在调用堆栈中反映出来:

结论
恭喜您,您现在知道调试代码的基本知识!使用步进、断点、表和调用堆栈窗口,你现在有基本的能够调试几乎任何问题。像许多事情一样,成为善于使用调试器需要一些实践和一些试验和错误。然而,你的程序得到的越大,你会发现调试器的价值就越大,所以它肯定是值得你投资的时间!

为了了解比特操作算子,首先要了解整数是如何在二进制中表示的。我们在第2.4节中谈到了这一点-整数,并将在这里扩大它。
考虑一个普通的十进制数,如5623。我们直观地了解,这些数字的平均(5 * 1000)+(6 * 100)+(2 * 10)+(3 * 1)。因为有10个十进制数,每个数字的值增加了10倍。
二进制数的工作方式是相同的,除了因为只有2个二进制数(1和0),每个数字的值增加了2倍。就像逗号通常用来制作大型的十进制数容易读(如1427435),我们经常写在4位元组二进制数使它们更容易阅读(1101 0101)。
作为一个提醒,在二进制中,我们从0到15这样:

符号数和二者的互补
在上面的例子中,我们只处理了无符号整数。在这一节中,我们将看看如何签署的数字(可能是负面的)处理。
符号整数通常使用一种称为两个互补的方法来存储。2的补码,最左(最重要的)位作为符号位。一个0符号位意味着数字是正的,一个1符号位意味着数字是负的。
正有符号数的存储就像是正的无符号数(与符号位设置为0)。
负符号数被存储为正数的倒数,加上1。例如,这里的我们如何转换- 5到二元二的补:
首先,我们计算出的二进制表示为5:0101 0000
然后,我们反转所有的位:1010 1111
然后我们添加1:1011 1111
转换- 76到二进制:
二进制的正76:1100 0100
反转所有的位:0011 1011
添加1:0100 1011
为什么我们要加1?考虑0号。如果一个负的值被简单地表示为正数的倒数,0将有两个表示:0000 0000(正零)和1111 1111(负零)。通过添加1,1111个1111故意溢出,并成为0000 0000。这可以防止0有两个表示,并简化了一些内部逻辑所需要的算术负数字。
要将一二的二进制数转换成十进制数,首先看符号位。
如果符号位为0,则只需将数字转换为上面的无符号数所显示的数字。
如果符号位是1,然后我们反转位,添加1,然后转换为十进制,然后使十进制数负(因为符号位是原来的负)。
例如,将1110个1001从两个的小数转换成一个十进制数:

0 0
原创粉丝点击