C++ 这是将二进制字符串转换为十进制值的低效方法吗? while(i从右向左移动
也许您希望研究使用标准库函数。它们可能至少与您在编译器中运行的任何函数一样优化:C++ 这是将二进制字符串转换为十进制值的低效方法吗? while(i从右向左移动,c++,binary,decimal,C++,Binary,Decimal,也许您希望研究使用标准库函数。它们可能至少与您在编译器中运行的任何函数一样优化: while(i < length) { pow = 1; for(int j = 0; j < 8; j++, pow *=2) { ch += (str[j] - 48) * pow; } str = str.substr(8); i+=8; cout << ch; ch = 0; }
while(i < length)
{
pow = 1;
for(int j = 0; j < 8; j++, pow *=2)
{
ch += (str[j] - 48) * pow;
}
str = str.substr(8);
i+=8;
cout << ch;
ch = 0;
}
也许您希望研究使用标准库函数。它们可能至少与您在编译器中运行的任何函数一样优化:
while(i < length)
{
pow = 1;
for(int j = 0; j < 8; j++, pow *=2)
{
ch += (str[j] - 48) * pow;
}
str = str.substr(8);
i+=8;
cout << ch;
ch = 0;
}
简单的回答可以是:
binary string = 10100101, decimal = 165, hex = a5
可能您可以使用int或long int,如下所示:
只需从0到n-1逐步遍历二进制数,其中n是最高有效位(MSB),
用升幂将它们与2相乘,然后将总和相加。例如,要转换1000(相当于8的二进制数),只需执行以下操作
1 0 0==>从右向左移动
0 x 2^0=0
0 x 2^1=0;
0 x 2^2=0;
1×2^3=8;
现在将它们加在一起,即0+0+0+8=8;这是十进制数,相当于1000。请阅读下面的程序,以便更好地理解这个概念
工作。注意:该程序仅适用于16位二进制数(非浮点数)或更少。如果有任何不清楚的地方,请留下评论。您一定会收到回复
//将二进制转换为十进制等效值的程序
long int x = strtol(your_binary_c++_string.c_str(),(char **)NULL,2)
#包括
#包括
int main()
{
int x;
int i=0,sum=0;
//提示用户输入16位二进制数
std::coutx;
而(i!=16)//运行16次
{
总和+=(x%10)*功率(2,i);
x=x/10;
i++;
}
std::cout简短的回答可以是:
binary string = 10100101, decimal = 165, hex = a5
可能您可以使用int或long int,如下所示:
只需从0到n-1逐步遍历二进制数,其中n是最高有效位(MSB),
用升幂将它们与2相乘,然后将总和相加。例如,要转换1000(相当于8的二进制数),只需执行以下操作
1 0 0==>从右向左移动
0 x 2^0=0
0 x 2^1=0;
0 x 2^2=0;
1×2^3=8;
现在将它们加在一起,即0+0+0+8=8;这是十进制数,相当于1000。请阅读下面的程序,以便更好地理解这个概念
工作。注意:该程序仅适用于16位二进制数(非浮点数)或更少。如果有任何不清楚的地方,请留下评论。您一定会收到回复
//将二进制转换为十进制等效值的程序
long int x = strtol(your_binary_c++_string.c_str(),(char **)NULL,2)
#包括
#包括
int main()
{
int x;
int i=0,sum=0;
//提示用户输入16位二进制数
std::coutx;
而(i!=16)//运行16次
{
总和+=(x%10)*功率(2,i);
x=x/10;
i++;
}
std::cout尽量减少运算次数,不要多次计算。只需乘以并向上移动:
#include <iostream>
#include <math.h>
int main()
{
int x;
int i=0,sum = 0;
// prompts the user to input a 16-bit binary number
std::cout<<" Enter the binary number (16-bit) : ";
std::cin>>x;
while ( i != 16 ) // runs 16 times
{
sum += (x%10) * pow(2,i);
x = x/10;
i++;
}
std::cout<<"\n The decimal equivalent is : "<<sum;
return 0;
}
该方案很容易推广到任何基最小化运算次数,且计算次数不超过一次。只需乘以并向上移动:
#include <iostream>
#include <math.h>
int main()
{
int x;
int i=0,sum = 0;
// prompts the user to input a 16-bit binary number
std::cout<<" Enter the binary number (16-bit) : ";
std::cin>>x;
while ( i != 16 ) // runs 16 times
{
sum += (x%10) * pow(2,i);
x = x/10;
i++;
}
std::cout<<"\n The decimal equivalent is : "<<sum;
return 0;
}
该方案很容易推广到任何基础那么类似于:
unsigned int result = 0;
for (char * p = str; *p != 0; ++p)
{
result *= 2;
result += (*p - '0'); // this is either 0 or 1
}
比如说:
unsigned int result = 0;
for (char * p = str; *p != 0; ++p)
{
result *= 2;
result += (*p - '0'); // this is either 0 or 1
}
您正在做一些不必要的事情,比如为每个循环创建一个新的子字符串。您可以使用str[i+j]
也不需要将0或1乘以幂。只需使用if语句即可
for (std::string::const_iterator i = str.begin(); i != str.end(); i++)
{
char ch = *i;
// ...
}
while(i cout您正在做一些不必要的事情,比如为每个循环创建一个新的子字符串。您可以使用str[i+j]
也不需要将0或1乘以幂。只需使用if语句即可
for (std::string::const_iterator i = str.begin(); i != str.end(); i++)
{
char ch = *i;
// ...
}
while(i 你能详细解释一下原因吗?我不需要你给我一个实现,但如果纯粹出于教学目的,我想了解istringstream在效率方面提供了哪些好处以及原因。我不知道istringstream的实际实现,我认为可能会有所不同,但我非常担心这是真的y硬位std::
性能。也是最好的(也是唯一的)衡量绩效的方法是概述您是否愿意详细说明原因?我不需要您给我一个实现方案,但如果纯粹出于教学目的,我想了解istringstream在效率方面提供了哪些好处以及原因。我不知道istringstream的实际实现,我认为可能有所不同,但我不知道我高度关注的是,比特std::
性能真的很难。也是最好的(也是唯一的)衡量性能的方法是分析性能。除了性能,使用标准库的另外两个好处是,由于没有重新发明轮子,减少了错误,提高了程序员的工作效率。除了性能,使用标准库的另外两个好处是,由于没有重新发明轮子,减少了错误,提高了程序员的工作效率。