这个怎么解释?thx~~~

发布于 2022-10-15 08:53:22 字数 742 浏览 31 评论 0

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雅心素梦 2022-10-22 08:53:22
  1. unsigned char b = (unsigned char)(~a) >> 4;

复制代码

ι不睡觉的鱼゛ 2022-10-22 08:53:22

#include

int main()
{
        unsigned char a = 0xA5;
        unsigned char b = (~a) >> 4;
        printf("a=%d, ...
ljsdaya 发表于 2011-04-22 00:05

    ~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.

如梦亦如幻 2022-10-22 08:53:22

~a的时候,要经过整型提升到int,首先将a无符号扩展到0000 0000 0000 0000 0000 0000 1010 0101, ...
liwangli1983 发表于 2011-04-22 08:54

    感谢拉,,原来这里发生了整型提升!!!
移位之后是: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

这样说明并不是巧合的相等,而是总相等拉·~~~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文