为什么ENOUGH就足够了?(将int存储在char数组中)

Ger*_*ger 4 c int char stringification

其中一个关于如何在C中将int转换为字符串的答案(及其注释)中, 给出了以下解决方案

char str[ENOUGH];
sprintf(str, "%d", 42);
Run Code Online (Sandbox Code Playgroud)

在评论CAF提到,ENOUGH可以在编译时间确定:

#define ENOUGH ((CHAR_BIT * sizeof(int) - 1) / 3 + 2)
Run Code Online (Sandbox Code Playgroud)

我得到了+ 2因为你需要能够显示减号和空终止符但是其他部分背后的逻辑是什么?特别CHAR_BIT

oua*_*uah 5

如果inttype是32位,你需要多少字节来表示任何数字(没有sign和null终止符)?

如果inttype为32位,则最大值int2147483648(假设为2的补码),即存储所需的字节1010.

要知道int特定平台(例如,32在我们的示例中)中的位数,我们可以使用CHAR_BIT * sizeof (int) == 32.记住CHAR_BIT是C字节中的位数,并sizeof产生一个以字节为单位的大小.

然后(32 - 1) / 3 == 10使10字节需要.您可能也想知道作者如何找到值3?那么该log基地210不止一点点3.