这个怎么解释?thx~~~
#include <stdio.h>
int main()
{
unsigned char a = 0xA5;
unsigned char b = (~a) >> 4;
printf("a=%d,b=%d\n",a,b);
unsigned char c = 0xA5;
unsigned char d = ~(c >> 4);
printf("c=%d,d=%d\n",c,d);
return 0;
}
请按 ENTER 或其它命令继续
a=165,b=245
c=165,d=245
首先a=165是不会变的,但是b怎么求
不添加括号,b=~a>>4; 答案也是跟上面一样;
1010 0101 右移4位 0000 1010 再求反 1111 0101 , 245
1010 0101 求反0101 1010 右移4位0000 0101 , 5
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
复制代码
~a的时候,要经过整型提升到int,首先将a无符号扩展到0000 0000 0000 0000 0000 0000 1010 0101,然后按位求反成为1111 1111 1111 1111 1111 1111 0101 1010,然后因为~运算符的结果为int型,所以在移位时进行算术右移,高位补原位,故结果为1111 1111 1111 1111 1111 1111 1111 1010,然后截取低8位(就是1111 1010)赋值给b.
感谢拉,,原来这里发生了整型提升!!!
移位之后是:1111 1111 1111 1111 1111 1111 1111 0101
这样: b=(~a) >> 4 ;应该等价于:b = ~a >> 4~~~过程你解释拉
而b = ~( a >> 4 ):过程:a算术移4位,0000 0000 0000 0000 0000 0000 0000 1010 ,然后求反,1111 1111 1111 1111 1111 1111 1111 0101 然后截低8位:1111 0101
这样说明并不是巧合的相等,而是总相等拉·~~~