困惑于我的c编程书中的示例代码

时间:2016-08-27 03:29:47

标签: c binary bitwise-operators

我对将(48)输出((>> 15-i)& 0x0001)的输出添加48的目的感到困惑。

/* Convert fixed 16-bit integer to binary digit string.
         Pre      num contains integral value to be converted
                     bitStr is a pointer to variable for bit string
         Post    bit string stored in str
*/

void bin16 (uint16_t num, char* bitStr) {

    for (int i = 0; i < 16; i++)
        bitStr[i] = (char) ((num >> 15 - i) & 0x0001) + 48;

    return;
}// end of bin16

2 个答案:

答案 0 :(得分:2)

bitStr是一个字符串。您需要将整数转换为char以在字符串中放入正确的值。这就是添加48的原因。这相当于添加'0'。 48是'0'的ASCII值。

与写这个相似 -

void bin16 (uint16_t num, char* bitStr)
{
    for (int i = 0; i < 16; i++)
        bitStr[i] = (char) ((num >> 15 - i) & 0x0001) + '0';
    return;
}

答案 1 :(得分:2)

48是字符&#39; 0&#39;的ASCII值。在这种情况下,它被用于在0和0之间进行转换。 1和字符&#39; 0&#39; &安培; &#39; 1&#39;

bin16()也可以写成:

void bin16 (uint16_t num, char *bitStr) {

    for (uint16_t i = 0; i < 16; i++)
        bitStr[i] = (char) ((num >> 15 - i) & 0x0001) + '0';
}