将整数更改为二进制数字字符串 我目前正在研究C++中MIPS处理器的COMP架构类,并且从十进制到二进制(有符号数字两种方式)都有一些问题。在最后一点之前,一切都正常,因为我当前的算法在1
Replace上属于int的越界区域:将整数更改为二进制数字字符串 我目前正在研究C++中MIPS处理器的COMP架构类,并且从十进制到二进制(有符号数字两种方式)都有一些问题。在最后一点之前,一切都正常,因为我当前的算法在1,c++,algorithm,binary,C++,Algorithm,Binary,Replace上属于int的越界区域: if((mask&a) >= 1) 与以下任何一项: if ((mask & a) != 0) 或: 您的问题是,最后一位给出的是负数,而不是正数。为stream//Correction定义的1>(int&)的问题-更不用说>:-)setbase()stream修饰符不支持2值作为参数 使用标准C函数strtol(),该函数具有基值参数(二进制为2) 或者,如果您确实希望自己实现转换,请尝试以下代码: int BinaryStri
if((mask&a) >= 1)
与以下任何一项:
if ((mask & a) != 0)
或:
您的问题是,最后一位给出的是负数,而不是正数。为stream//Correction定义的1>(int&)的问题-更不用说>:-)setbase()stream修饰符不支持2值作为参数
int BinaryStringToDecimal(string a)
{
int Rslt = 0;
int Mask = 1;
for (int i = a.length()-1; i >= 0; --i, Mask <<= 1) {
if (a.at(i) != '0') {
Rslt |= Mask;
}
}
return (Rslt);
}
int BinaryStringToDecimal(字符串a)
{
int Rslt=0;
int-Mask=1;
对于(int i=a.length()-1、 i>=0;--i,Mask为什么不能将int
转换为uint
?那么生成二进制字符串就很容易了,因为您不必担心符号位。将二进制字符串转换为int
:将其构建为uint
,然后将其转换为int
:
string DecimalToBinaryString(int a)
{
uint b = (uint)a;
string binary = "";
uint mask = 0x80000000u;
while (mask > 0)
{
binary += ((b & mask) == 0) ? '0' : '1';
mask >>= 1;
}
cout<<binary<<endl;
return binary;
}
string十进制字符串(int a)
{
uint b=(uint)a;
字符串binary=“”;
uint掩码=0x80000000u;
while(掩码>0)
{
二进制+=((b&mask)==0)?“0”:“1”;
掩码>>=1;
}
实际上,这些都有标准的一行程序
#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();
#包括
std::string s=std::bitset<64>(12345).to_string();//字符串转换
标准::cout(54321)输入;
std::cin>>输入;
无符号长ul=input.to_ulong();
.我检查了你的代码,没有发现任何错误。这是我使用的代码
#include <iostream>
#include <string>
using namespace std;
int main ()
{
int a=1111165117;
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;
system("PAUSE"); //optional if not using ideone
return EXIT_SUCCESS; //optional if not using ideone
}
#包括
#包括
使用名称空间std;
int main()
{
INTA=1111165117;
字符串二进制(“”);
int-mask=1;
对于(int i=0;i<31;i++)
{
如果((屏蔽a)>=1)
binary=“1”+二进制;
其他的
binary=“0”+二进制;
maskOne改变效率的选项是一次工作4位,将每个Nyble映射到对应的4个字符的字符串。这将减少字符串赋值。我还将考虑按MSB到LSB顺序生成答案,而不是按LSB顺序生成答案,因此您可以使用binary+=pattern[Nyble];
。扩展右边的字符串可能(几乎无法测量)比在左侧有效插入时的效率更高。除非我真的需要自己进行转换,否则我会使用std::bitset
来处理转换和打印:std::cout除了像@JonathanLeffler所说的从左到右工作之外,我建议您预先分配整个字符串,因为您知道输出将是32char
s。根据字符串实现的不同,它可能会或可能不会有不同,但肯定不会有什么影响。@Chaos\u 99就是这样。你从哪里得到的呢?@Chaos\u 99很久以前,没有人能够制作出可靠的编译器,而且没有足够的用户和测试用例来进行足够的预发布QA.Tho这些日子已经过去了,但有些人选择留在这些日子里。别告诉我,我宁愿早换也不愿晚换。但是如果你必须保证你的代码在20多年的时间里编译完全相同,你不能时不时地做一个升级。但让我们到此结束。这对其他人没有帮助。令人惊讶的是,似乎没有人会这么做该位集的to_字符串将返回填充的二进制表示形式。显然,由于位集返回的是该集的二进制表示形式,因此它应该返回该值。但是如果有人“误用”将整数转换为二进制字符串表示的位集,它们将调用填充的输出。cout@parastrish0x
表示十六进制,而不是二进制。C++14引入以0b
开头的二进制文本。
string DecimalToBinaryString(int a)
{
uint b = (uint)a;
string binary = "";
uint mask = 0x80000000u;
while (mask > 0)
{
binary += ((b & mask) == 0) ? '0' : '1';
mask >>= 1;
}
cout<<binary<<endl;
return binary;
}
uint b = 0;
for (int i = 31; i >=0; --i)
{
b <<= 1;
if (a.at(i) == '1')
b |= 1;
}
int num = (int)b;
#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();
#include <iostream>
#include <string>
using namespace std;
int main ()
{
int a=1111165117;
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;
system("PAUSE"); //optional if not using ideone
return EXIT_SUCCESS; //optional if not using ideone
}