符号优先级1题

unsigned char i=0x80;
printf(“0x%x\n”, ~i>>3+1);//无符号16进制输出
char ci=0x80;
printf(“0x%x\n”, ~ci>>3+1);

解析:
取反操作前,字符型数据会自动转成整形
即 i = 0x00000080
~i 为 0xffffff7f
~i>>3+1 由于+号运算符优先级比>>位移运算符高,所以 ~ i>>3+1等价于 ~i>>4,则得到0xfffffff7

ci变量也一样,先转换成整形,为0xffffff80(因为ci为有符号型字符变量,且符号位为1,转成整形时,高位补1)
之后同理

  1. 移位操作优先级最低, 所以都是右移4位, 取反优先级最高, 最先做
  2. 整形提升, uchar会提升到uint, 而char会提升到int, 所以0x80在uint中还是0x80, 而在int为0xffffff80, 它们取反的结果就不同了
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值