有人可以解释用C我右移的行为?

问题描述 投票:1回答:1

我不明白下面的代码的结果:

unsigned char p = 170;
p = (~p) >> 4 & 255;

其结果是:245,我不明白为什么。

首先,(〜P)将采用什么使得10101010至01010101

这是一个正数,因此>> 4会导致00000101在我的理解。

但是,这似乎是11110101,我不明白为什么。在我的理解正数向右移动将插入0而不是1。

c shift
1个回答
6
投票

当在表达式中使用,比int窄的整数,通常转换为int。所以,使用说明16位int,在(~p) >> 4 & 255

  • p是101010102。
  • 此被转换成int,产生00000000101010102。
  • ~p产生11111111010101012。
  • (~p) >> 4可产生11111111111101012.(负值的右移是实现定义。)
  • (~p) >> 4 & 255产生111101012。
  • 111101012是245。
© www.soinside.com 2019 - 2024. All rights reserved.