小编Luc*_*oot的帖子

AVR C十六进制和十进制乘法不如预期

我刚刚在十六进制整数(例如0xFFFF)与十进制整数(例如2)相乘时,在我的代码中发现了一个错误.这是出现问题的代码:

print_int_new_line(0xFFFF*2);
print_int_new_line(65535*2);
Run Code Online (Sandbox Code Playgroud)

执行此代码会给我以下结果:

65534
131070
Run Code Online (Sandbox Code Playgroud)

这是相关的UART代码:

void print_int_new_line(uint64_t data) {
    print_int(data);

    print_new_line();
}

void print_int(uint64_t data) {
    char data_buffer[(int)(log(data)+2)]; // size of the number (log(number)+1) + 1 for the /0

    ultoa(data, data_buffer, 10); // convert the int to string, base 10

    // print the newly created string
    print_string(data_buffer);
}

void print_string(char * data) {

    // transmit the data char by char
    for(; *data != '\0'; data++){
        USART_transmit(data);
    }
}

void USART_transmit(const char * data){
    /* Wait for empty transmit …
Run Code Online (Sandbox Code Playgroud)

c embedded avr

3
推荐指数
1
解决办法
139
查看次数

标签 统计

avr ×1

c ×1

embedded ×1