Int to Base 2& 8优化

时间:2017-09-04 17:38:19

标签: c++ optimization

我目前正在阅读一本C ++书籍,从一开始就学习它。我已经拥有编码知识但我真的想通过尽可能多地从我自己编写代码而不是总是使用库来深入学习C ++。 (虽然我正在学习。我稍后会使用库。)

我正在阅读有关演员的文章。在我读书的时候,我尝试用练习来应用我刚才读到的内容。但是这次我失去了控制,它远离我正在练习的东西(演员),但编码很有趣。 [编辑]我会读Different casts。 - 谢谢@Chnossos

我在制作这些代码时学到了很多东西,比如stringstream,reverse等。

这是一个基于2的简单int,我想知道是否有一种优化代码的方法,或者它是否像这样正确。

通过优化代码了解更多信息,了解专家们正在做什么,这可能会非常棒。

感谢。

'\0'

[编辑 - 最终] 我从所有答案中理解的是,我的优化愿景与您的不同。 @Chnossos最了解我的好处,如演员类型差异和丢弃所有Double并使用Modulo(%)代替。对于其他人,我认为这是关于您的优化愿景,例如尽可能多地使用库。

感谢您的回答。如果有人在与@Chnossos相同的情况下进行其他代码优化,那么欢迎您。

1 个答案:

答案 0 :(得分:5)

提供整数的二进制表示的最简单(也可能是最有效)的方法是使用std:bitset

int input;
std::bitset<sizeof(int)> bits(input);
std::cout << bits.to_string() << std::endl;

完成。

关于八进制(基数8)表示,您只需使用std::oct I / O操纵器:

std::cout << std::oct << input << std::endl;

如您想了解自己的手动代码,这里有一些提示如何有效地做到这一点:

  • 请勿使用floatdouble来执行此操作。而是坚持(unsignedint值并在循环中使用模数(%)和整数除法运算来提取数字。
  • 如果您为所选基础提取了数字,则可以通过添加'0'将其转换为ASCII字符表示。
  • 位移运算符(>>)和二进制运算符(&)可用于识别单个位值,并将这些值转换为'0''1'用于表示基数2的值。

由于您非常渴望自学,我将继续阅读上述内容,并将这些信息整合到一个可行的解决方案中。

  

通过优化代码了解更多信息,了解专家们正在做什么,这可能会非常棒。

您可以随时检查和研究任何免费C ++编译器(GCC,Clang,...)的std::bitsetstd::oct实现的实现,以查看真正的专家