我目前正在为Comp体系结构类进行C ++中的MIPS处理器的仿真,并且在从十进制数转换为二进制(双向有符号数)方面遇到一些问题。一切工作都很好,直到最后一刻,因为我当前的算法落入1 << = 31上int的范围之外。只需按正确的方向轻推它即可运行。谢谢!
//Assume 32 bit decimal number string DecimalToBinaryString(int a) { string binary = ""; int mask = 1; for(int i = 0; i < 31; i++) { if((mask&a) >= 1) binary = "1"+binary; else binary = "0"+binary; mask<<=1; } cout<<binary<<endl; return binary; }
我还包括其他算法以确保完整性。对于缺少评论,我深表歉意,但这很简单。
int BinaryStringToDecimal(string a) { int num = 0; bool neg = false; if(a.at(0) == '1') { neg = true; for(int x = a.length()-1; x >= 0; x--) { if(a.at(x) == '1') a.at(x) = '0'; else a.at(x) = '1'; } a.at(a.length()-1) += 1; for(int x = a.length()-1; x >= 0; x--) { if(a.at(x) == '2') { if(x-1 >= 0) { if(a.at(x-1) == '1') a.at(x-1) = '2'; if(a.at(x-1) == '0') a.at(x-1) = '1'; a.at(x) = '0'; } } else if(a.at(x) == '3') { if(x-1 >= 0) a.at(x-1) += '2'; a.at(x) = '1'; } } if(a.at(0) == '2') a.at(0) = '0'; else if(a.at(0) == '3') a.at(0) = '1'; } for(int x = a.length()-1; x >= 0; x--) { if(a.at(x) == '1') num += pow(2.0, a.length()-x-1); } if(neg) num = num*-1; return num; }
另外,如果有人知道有什么更好的方法可以更有效地编写这些内容,我也很想听听。我只有两个入门编程类,但是一直在使用不同的技术来了解我对它们的风格的满意程度。
实际上有这些的标准单衬板。
#include <bitset> std::string s = std::bitset< 64 >( 12345 ).to_string(); // string conversion std::cout << std::bitset< 64 >( 54321 ) << ' '; // direct output std::bitset< 64 > input; std::cin >> input; unsigned long ul = input.to_ulong();
将此运行作为演示。