【发布时间】:2011-11-13 01:30:22
【问题描述】:
我正在学习关于操作系统的大学课程,我们正在学习如何从二进制转换为十六进制、从十进制转换为十六进制等。今天我们刚刚学习了如何使用二进制补码将有符号/无符号数字存储在内存中(~数字 + 1)。
我们需要在纸上做一些练习,我希望能够在将作业提交给老师之前验证我的答案。我为前几个练习编写了一个 C++ 程序,但现在我不知道如何用以下问题验证我的答案:
char a, b;
short c;
a = -58;
c = -315;
b = a >> 3;
我们需要显示a、b 和c 的二进制表示在内存中。
我已经在纸上完成了它,它给了我以下结果(内存中的所有二进制表示形式):
a = 00111010(它是一个字符,所以 1 个字节)
b = 00001000(它是一个字符,所以 1 个字节)
c = 11111110 11000101(很短,所以2个字节)
有没有办法验证我的答案? C++ 中是否有标准方法来显示数字内存中的二进制表示,还是我必须自己编写每个步骤(计算二进制补码然后转换为二进制)?我知道后者不会花这么长时间,但我很好奇是否有标准的方法来做到这一点。
【问题讨论】:
-
你了解十六进制表示吗?如果你这样做了,你可以打印十六进制表示(使用
std::hex)操纵器 - 我会把它作为练习留给你来解决剩下的...... -
您非常强调“内存中”,但我希望它们不会让您处理字节序问题。
-
你知道什么是字节序吗?如果你这样做了,你关心这个练习吗?这些问题的答案可能会影响您的问题的答案。
-
根据您的 IDE,如果您只是想验证您的手写解决方案的正确性,而不是实际编写程序来显示有用的内容,您可以使用 Visual Studio 的内存查看器之类的工具来查看内存的确切内容。
-
即使是 Google 也会这样做,例如 “-58 in binary” - 但 +1 表示想了解如何在代码中自己完成。
标签: c++ binary iostream representation std-bitset