java short 无符号_有符号/无符号的int,short和char

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:36   1528   0

在此引用它作为参考:

#include

int main(void){

int l;

short s;

char c;

l = 0xdeadbeef;

s = l;

c = l;

printf("l = 0x%x (%d bits)\n", l, sizeof(l) * 8);

printf("s = 0x%x (%d bits)\n", s, sizeof(s) * 8);

printf("c = 0x%x (%d bits)\n", c, sizeof(c) * 8);

return 0;

}

我在我的机器上的输出是: -

l = 0xdeadbeef (32 bits)

s = 0xffffbeef (16 bits)

c = 0xffffffef (8 bits)

以下是我的理解: -

赋值s = l,c = l将导致s和c被提升为整数,它们将分别具有l的最后16位(0xbeef)和最后8位(0xef) .

Printf尝试将上述每个值(l,s和c)解释为无符号整数(因为%x作为格式说明符传递) . 从输出中我看到符号扩展已经发生 . 我怀疑是因为%x代表unsigned int,为什么在打印s和c时会发生符号扩展? s的输出不应该是0x0000beef而c的输出应该是0x000000ef吗?

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP