小编Avi*_*Avi的帖子

C:gcc中的uint16_t减法行为

我试图减去两个无符号整数并将结果与​​有符号整数(或文字)进行比较.使用unsigned int类型时,行为符合预期.当使用uint16_t(from stdint.h)类型时,行为不是我所期望的.使用gcc 4.5进行比较.
给出以下代码:

unsigned int a;
unsigned int b;

a = 5;
b = 20;

printf("%u\n", (a-b) < 10);
Run Code Online (Sandbox Code Playgroud)

输出为0,这是我的预期.a和b都是无符号的,b大于a,因此结果是一个大的无符号数,大于10.现在如果我改变a和b来输入uint16_t:

uint16_t a;
uint16_t b;

a = 5;
b = 20;

printf("%u\n", (a-b) < 10);
Run Code Online (Sandbox Code Playgroud)

输出为1.这是为什么?两个uint16_t类型之间的减法结果是存储在gcc中的int中吗?如果我更改1010U输出再次为0,这似乎支持这一点(如果减法结果存储为int并且与unsigned int进行比较,则减法结果将转换为unsigned int).

c unsigned gcc stdint

1
推荐指数
2
解决办法
2289
查看次数

标签 统计

c ×1

gcc ×1

stdint ×1

unsigned ×1