gpt4 book ai didi

c - 4位十进制到16位二进制转换码

转载 作者:行者123 更新时间:2023-12-02 22:10:35 24 4
gpt4 key购买 nike

#include <stdio.h>

int main()
{
char str[17];
getBin(3334, str);
printf("%s\n", str);
return 0;
}

void getBin(int num, char *str)
{
*(str+16) = '\0';
int mask = 0x8000 << 1;
while(mask >>= 1)
*str++ = !!(mask & num) + '0';
}

我真的不明白 while 循环是如何工作的。有人可以用简单的术语解释它在做什么吗?谢谢

最佳答案

是的,当然。所以 0x8000 = 8 * 16^3 = 2^15 。现在,如果您再将其向左移动一次,您将得到 2^16。

while 循环不断地对所有值进行掩码处理:

  • 2^15
  • 2^14
  • 2^13...

因此 while 循环将 mask 视为常规整数中 2 的幂的迭代器。

现在 !!(mask & num) 是做什么的做 ?如果掩码指示的位被翻转,它返回 1 on或 0 如果它是 off .

表达式!!(mask & num)返回 0 或 1 并添加到 0 的字符代码中它返回 0 的字符代码或 1 .

例如,如果 num=12mask=4然后!!(4 & 12) = !!(100 & 1100) = !!(100)= !0 = 1 .现在,如果您添加 1 + '0'你得到了什么?你得到 1+48=49这是 1 的字符代码.

*str++ = ..将值分配给字符串中的特定位置,然后递增指针以指向下一个字符。

问题是:是str是否以 null 结尾?

我认为 *(str+16) = '\0'; 行负责空终止,因为它会预防性地设置一个空终止字节。

所以我想这是对你上面写的那段代码的解释。

关于c - 4位十进制到16位二进制转换码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15379245/

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