想问一个关于C语言位操作的问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 11:35:37
char *itobs(int n, char* ps)
{
int size = 8*sizeof(int);
for (int cnt = size - 1; cnt >= 0; cnt--, n >>= 1)
{
ps[cnt] = (1 & n) + '0';
}
ps[size] = '\0';

return ps;
}

高手们问下。。
那个加'0'是啥意思?
书上说可以转换。。
是怎么个情况。。有点不太明白。

我可不可以这样理解:
(1&n)所得出的0位上不管是1还是0.
在ASCII码上都是对应着0000 0000和0000 0001这两个字符。
(1 & n) + '0'
在加上字符'0' ASCII码'0'字符的二进制是0011 0000
那么刚才所得的 (1 & n)再加上字符'0'得
0000 0000 + 0011 0000 = 00110000 即:ASCII码对应的字符'0'

0000 0001 + 0011 0000 = 00110001 即:ASCII码对应的字符'1'

ps[cnt] = (1 & n) + '0';相当于ps[cnt] = (1 & n) + 48;(‘0’ASCII码值为48),这句的是为了把(1 & n)转化为对应的ASCII值,(1 & n)必定是以个0-9之间的数字,比如,(1 & n)=8,通过此句,(1 & n)=8+48=56,‘8’的ASCII值就是56,把它变为‘8’。当printf("%c",ps[cnt])输出的就是8.