如何获得真正的16位值?

时间:2017-04-20 23:42:04

标签: c++ types

所以我使用mbed接口使用LPC1768。

此片段:

int16_t test = -1;
test -= 1;
printf("Value: %d\n", sizeof(test));
if (test== 0xFFFE) {
    printf("It's stayed the same.\n");
} else if (test== 0xFFFFFFFE) {
    printf("It's been extended.\n");
} else {
    printf("None\n");
}

打印出来 价值:2 它已被延长。

我怎么能修改它以便它打印出来"它保持不变。"?目标是

int16_t test = -1

使测试为16位值,并设置所有位。

1 个答案:

答案 0 :(得分:2)

fadein0xFFFFFFFE都是0xFFFE个常量。前者超出int的范围,因此它溢出到负数(-2),然后int操作数被扩展为short(带符号扩展名)并且比较成功。后者相当于值65534,不等于-2。

要使测试成功,请将文字int投射到0xFFFE,这会导致它溢出到值-2:

int16_t