gpt4 book ai didi

将int转换为一定大小的二进制字符串

转载 作者:行者123 更新时间:2023-11-30 18:12:20 28 4
gpt4 key购买 nike

在使用 Java 编程一段时间后,我正在努力适应 C,我需要帮助。我正在寻找一种接受以下输入的方法:

  1. 整数n,要转换为二进制字符串(字符数组)。
  2. 整数length,定义字符串的长度(左侧未填充二进制数的位置将设置为默认0)。

    //Here's some quick code in Java to get a better understanding of what I'm looking for:

    public static String convertToBinary(int length, int n) {
    return String.format("%1$" + bit + "s", Integer.toBinaryString(value)).replace(' ', '0');
    }

    System.out.println(convertToBinary(8,1));

    // OUTPUT:

    00000001 (not just 1 or 01)

关于 C 语言中的等价物有什么提示吗?另外,您能给我提供一个如何返回生成的二进制字符串的示例吗?

(不是重复的,因为我要查找的是“00000001”,而不仅仅是“1”)

最佳答案

C 标准库不包含与 Integer.toBinaryString() 等效的函数。好消息是,编写这样的函数不会太复杂,而且如果您正在学习 C 语言,这个问题非常适合学习如何使用按位运算符

您需要查阅现有的教程或手册来了解所有详细信息,但这里有一些对此或类似任务有用的示例。这些示例中的所有数字都是无符号整数。

n >> m移动 n 中的所有位就在 m步骤,并在左侧填充零。所以如果 n = 13 (1101 in binary) , n >> 1将是6 (i.e. 110) ,和n >> 2将是3 (i.e. 11) .

n << m做同样的事情,但向左移动。 3 << 2 == 12 。这相当于乘以 n 2 的 m 次方。 (如果不清楚原因,您需要考虑一下二进制数是如何表示的,直到您清楚地理解它;如果您对该属性有直观的理解,事情就会变得更容易。)

n & m计算结果为一个数字,当且仅当 n 和 m 中的每一位都为 1 时,结果的每一位都为 1。例如12 & 5 == 4 ,(1100、0101和0100分别是12、5和4的表示)。

所以把它们放在一起,n & (1 << i)当且仅当设置了位 i 时才为非零:1显然只有一个位设置,1 << i将其移动到适当的位置,然后 n & (1 << i)检查该位置是否也有 1 位 n 。 (请记住,最右边/最低有效位是位0,而不是位1。)因此,使用它,只需单独检查每个位以查看它是1还是0,然后您就可以简单地使用它有你的二进制转换函数。

关于将int转换为一定大小的二进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36847335/

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