我正在学习关于操作系统的大学课程,我们正在学习如何从二进制转换为十六进制,十进制到十六进制等等.今天我们刚刚学习了如何使用二进制补码(〜数字)将有符号/无符号数存储在内存中+ 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++中是否有一种标准方法可以在数字的内存中显示二进制表示,或者我是否必须自己编写每个步骤(计算二进制补码然后转换为二进制)?我知道后者不会花那么长时间,但我很好奇是否有一种标准的方法可以做到这一点.
我想显示浮点数的二进制(或十六进制)表示.我知道如何手动转换(使用此处的方法),但我有兴趣看到相同的代码示例.
虽然我对C++和Java解决方案特别感兴趣,但我想知道是否有任何语言使它变得特别容易,所以我使这种语言不可知.我很想看到其他语言的解决方案.
编辑:我已经很好地覆盖了C,C++,C#和Java.是否有任何想要添加到列表中的替代语言专家?
我正在开始C++类,并希望在十六进制表示和二进制之间转换字母.我可以设法打印出十六进制数字:
for(char c = 'a'; c <= 'z'; c++){
    cout << hex << (int)c;
}
但我不能对二进制文件做同样的事情.没有std::bin我可以用来将十进制数转换为二进制数.
可能重复:
在C++中浮动到二进制
我有一个非常小的双变量,当我打印它时我得到-0.(使用C++).现在为了获得更好的精度,我尝试使用
cout.precision(18); \\i think 18 is the max precision i can get.
cout.setf(ios::fixed,ios::floatfield);
cout<<var;\\var is a double.
但它只写-0.00000000000 ...
我想看看var的确切二进制表示.
换句话说,我想看看在这个var的堆栈存储器/寄存器中写入了什么二进制数.
可能重复:
在C++中浮动到二进制
我想在C++中打印出浮点数的二进制表示.出于好奇,不太实用.
以下程序不能编译.reinterpret_cast失败.我可以使用什么样的演员表以便我可以做"&(1 << i)"部分?
#include <iostream>
using namespace std;
void toBinary(float num) {
  int numi = reinterpret_cast<int>(num);
  cout << num << " " << numi << endl;
  for (int i = 0; i < 8 * sizeof(num); i++){
    if (numi & (1<<i)) {
      cout << 1;
    } else {
      cout << 0;
    }
  }
  cout << endl << endl;
}
int main() {
  float a;
  cout << sizeof(int) << " " << sizeof(float) << endl;
  a = 13.5; …我很无聊,想看看double的二进制表示是什么样的.但是,我发现窗户上有些奇怪.以下代码行说明
double number = 1;
unsigned long num = *(unsigned long *) &number;
cout << num << endl;
在我的Macbook上,这给了我一个非零数字.在我的Windows机器上它给我0.
我期待它会给我一个非零数字,因为1.0作为double的二进制表示不应该全为零.但是,我不确定我要做的是否是明确定义的行为.
我的问题是,上面的代码是愚蠢和错误的吗?而且,有没有办法可以打印出双精度的二进制表示?
谢谢.