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

在此引用它作为参考:

#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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值