rtos

导航

 

uint16_t swj_rx_buffer[SWJ_RX_SIZE] = {0};

if (swj_rx_buffer[0] == ~swj_rx_buffer[1])

比较时会一直失败,需要对取反的数据进行强制类型转换,写成如下形式即可:

if (swj_rx_buffer[0] == (uint16_t)(~swj_rx_buffer[1]))

注意如下C语言规范:

一元运算符~的操作数必须是整形,结果为操作数的二进制反码。在运算过程中需要对操作数进行整型提升。如果操作数为无符号类型,则结果为提升后的类型能够表达的最大值前去操作数的值而得到的结果。如果操作数为带符号类型,则结果的计算方式为:将提升后的操作数转换为相应的无符号类型,使用运算符~计算反码,再将结果转换为带符号类型。结果的类型为提升后的操作数的类型。

posted on 2012-12-18 15:10  rtos  阅读(201)  评论(0)    收藏  举报