gpt4 book ai didi

c - 在 C 中进行二进制算术的最佳方法?

转载 作者:太空狗 更新时间:2023-10-29 17:00:13 25 4
gpt4 key购买 nike

我正在学习 C 并编写一个简单的程序,它将采用 2 个字符串值,假设每个字符串值都是二进制数,并根据用户选择执行算术运算:

  • 将两个值相加,
  • 从输入 1 中减去输入 2,或者
  • 将两个值相乘。

我的实现假定字符串中的每个字符都是二进制位,例如char bin5 = "0101";,但一次通过字符串解析一个字符的方法似乎太天真了。理想情况下,我希望直接使用二进制值。

在 C 中执行此操作的最有效方法是什么?有没有更好的方法将输入视为二进制值而不是 scanf() 并从字符串中获取每一位?

我做了一些研究,但没有发现从初学者的角度来看明显更好的方法。如有任何建议,我们将不胜感激!

最佳答案

建议:
没有什么比在字符串中一次遍历一个字符并确保用户只输入 1 和 0 更好的了。请记住,如果您假设一切都是10,即使您可以编写一个真正快速的汇编例程,你真的不想那样做。用户可以输入任何内容,而您希望能够告诉他们他们是否搞砸了。

的确,与将实际数字相加可能需要的几个周期相比,这似乎慢得令人难以置信,但是如果您在纳秒或毫秒内得到答案真的很重要吗?无论如何,人类只能检测到 30 毫秒的延迟。

最后,与解析字符串或添加数字相比,从用户那里获取输入并将输出写入屏幕所花费的时间已经长得多,因此您的算法几乎不是这里的瓶颈。为实际上是计算密集型的事物保存您花哨的优化:-)。

您在这里应该关注的是 reduce task 的人力密集程度。而且,事实证明有人已经为你做了这件事。

解决方案:
看看the strtol() manpage :

long strtol(const char *nptr, char **endptr, int base);

这将使您可以将任何基数的字符串 (nptr) 转换为长整数。它也检查错误。转换二进制字符串的示例用法:

#include <stdlib.h>

char buf[MAX_BUF];
get_some_input(buf);

char *err;
long number = strtol(buf, &err, 2);
if (*err) {
// bad input: try again?
} else {
// number is now a long converted from a valid binary string.
}

提供基数 2 告诉 strtol 转换二进制文字。

关于c - 在 C 中进行二进制算术的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com