以下函数旨在将其参数(整数)从十进制转换为八进制。

std::string dec_to_oct(int num) {
    std::string output;
    for(int i=10; i>=0; --i) {
        output += std::to_string( (num >> i*3) & 0b111 );
    }
    return output;
}

它适用于任何正输入,但是,对于num = -1它返回77777777777 ,当它应返回37777777777 ,因此第一个数字需要为3而不是7 为什么会这样呢? 对于所有负输入,该功能似乎都不正确。 如何调整算法,使其对负数正确返回?

注意:这是CS作业,所以我很感谢提示/技巧。

===============>>#1 票数:2 已采纳

这是因为算术移位保留了数字的符号。 为了克服这个问题,首先将输入整数转换为等效的无符号类型。

(((unsigned int)num) >> 3*i) & 7


更进一步,您可以使函数模板化,并将指针转换为uint8_t*的输入,使用sizeof计算八进制数字的数量(由DanielH建议)。 但是,这将涉及更多的内容,因为某个数字的位可能会超过两个字节。

===============>>#2 票数:0

复制文档粘贴

ios_base&oct(ios_base&str);

使用八进制基数将str流的基格式标志设置为oct

 // modify basefield #include <iostream> // std::cout, std::dec, std::hex, std::oct int main () { int n = 70; std::cout << std::dec << n << '\\n'; std::cout << std::hex << n << '\\n'; std::cout << std::oct << n << '\\n'; return 0; } 

输出

 70 46 106 

因此,最重要的是您正在重新发明轮子。

  ask by Dando18 translate from so

未解决问题?本站智能推荐:

1回复

需要帮助将带小数的数字转换为其他基数C#

我需要C#程序的帮助,该程序必须将任何数字(无论是整数还是十进制)转换为任何基数(在合理范围内)。 该程序有几个文本框(这是一个胜利形式),所有文本框都开始为空白。 当用户将数字(可能带有小数)添加到所有更新的框之一中时。 默认框为2、8、10、16的底数,最后一个框有一个子框,用于输
1回复

如何使用动态内存分配将十进制转换为八进制?

我写了两段代码。 这个不起作用,因为它向后写代码。 我写了这段代码,因为第一个代码不起作用。 基本上我的想法是用元素填充数组然后向后计数。
2回复

将十进制转换为平衡的Heptavintimal

我正在尝试创建一个函数来将十进制转换为平衡的Heptavintimal(0123456789ABCDEFGHKMNPRTVXZ),其中0表示-13,D:0和Z 13 我试过这个,但有些情况不能正常工作: 这是我在这个例子中得到的-14,-15,14,15不起作用
3回复

将大十六进制字符串转换为十进制字符串

我需要将一个较大的(对于内置数据类型而言太大)十六进制字符串转换为带有十进制表示形式的字符串。 例如: 我目前正在使用c ++ BigInt类 , 该类提供了一种非常简单的方法来实现此目的(但仅适用于GPL): 没有第三方算术库,是否有简单的方法可以完成此转换? 还是可以推荐
3回复

0是十进制文字还是八进制文字?

零总是为零,所以没关系。 但在最近与我的朋友讨论时,他说今天几乎没有使用八进制文字。 然后我突然意识到我的代码中几乎所有的整数文字都是八进制的,即0 。 根据C ++语法, 0是八进制文字吗? 标准说什么?
1回复

在c ++中,如何确定将八进制数字转换为十进制时何时退出循环?

请记住,我几乎是C ++的新手,这只是我在课堂上要做的一个程序。 我想我知道我该怎么做。 我只是不确定在while循环中将什么作为控制条件。 我应该能够转换给定的任何八进制数,那么如何知道我何时在第一个数并且应该停止? 我正在使用递增单位%10(又名%10,%100,%1000)从右向左
5回复

左移十进制除法

我遇到一个不使用除法(/)和模块(%)将基数从10转换为2的问题,所以我想出了使用按位AND(&)和右移(>>)运算符的解决方案。 因此,我开始学习这两个运算符的确切功能,但是对于某些问题,我仍然找不到答案或无法理解其背后的逻辑。 如果我正确理解除法运算是根据数字的位数,
1回复

在十进制和任意基数之间转换的C ++模板

是否有一个c ++结构或模板(在任何库中)可以让我在十进制和任何其他基数之间进行转换(就像位集可以做什么)?
1回复

在C ++中递归地从十进制到八进制。 以std :: string格式输出

我正在尝试在C ++中将十进制整数十进制化为八进制字符串。 我尝试了以下代码,但未成功。 辅助函数to_string本身可以很好地工作。 问题似乎出在递归函数调用中。 我看起来很讨厌。 任何帮助,将不胜感激!
3回复

c ++将八进制分数转换为小数分数?

我正在研究一个程序,它意味着将八进制分数作为输入并将其转换为小数。 到目前为止,我有一部分代码将小数点前的部分转换为十进制,而不是小数点后的浮点数。 我试图使用模数,但因为我的变量是浮点数而失败。 有没有办法将小数点后的剩余数字转换为八进制的十进制数? 我在下面发布了我的代码。 任