当前位置:学习生活->会员解答 ->请问以下这段代码代表什么意思

原创版权标志请问以下这段代码代表什么意思

作者:wozhizhizhi  发表时间:2018/1/16 10:01:47  阅读:
[摘要] C++技术网已经用心解答了用户提出的问题【请问以下这段代码代表什么意思】,如还有问题,请继续在文章底部留言交流,直到完全懂了为止。
(unsigned int)((*raw_image)<<16 | (*raw_image)<<8 | (*raw_image) | 0xff000000);其中raw_image是 unsigned char *raw_image,那么(unsigned int)((*raw_image)<<16 | (*raw_image)<<8 | (*raw_image) | 0xff000000);应该怎么理解了呢,同时希望可以额外帮我解释下高位,低位,左移右移是怎么回事

C++技术网会员解答:

    感谢您对C++技术网的支持与信任。

    对于高位、低位、左移和右移几个概念,表面上看上去可以简单解释,但是恐只能让您得到初步的认知,而得不到精髓。讲的太专业的描述,可能又造成晦涩难懂。所以,为了深入浅出解答您这个问题,专门写了一篇文章,以形象的例子来说明这几个概念,道出其精髓,供您学习参考。

    对于这四个概念的针对性讲解,请阅读文章《深入浅出一举拿下晦涩的高位低位和左移右移》。那么这四个概念,就不在此处解释了。

    当然,请先看完上面这篇文章,再继续往下看。

    这里假设您已经看明白了左移的概念了。那么<<16和<<8的左移16位和左移8位,是针对*raw_image取值得到的内存的比特位进行移动操作。而最左边的比特位必然会因为左移而丢失,右侧空降的比特都自动用0填充。在多个左移之后得到多个比特序列,然后再进行位或,最终形成比特位的过滤。

    为了形象理解这个过程,请自己手动模拟一个过程:

1010  <<2      得到1000

1110  <<1      得到1100

两者相位或,得:  1100

    那么左移16和左移8是按照字节为单位在移动,因为一个字节8位。那么前面三个,第一个左移16位,第二个左移8位,第三个不动,三个做位或操作,即将三个比特序列依次位或,对应的两个比特位只要有一个是1就得到1,最后形成一个新的比特位序列。最后用0xff000000来做过滤,同样是比特位过滤,只不过,这个数字有特定的过滤方式,是选择性过滤的意思。

    对于位操作,最直观的就是,将十六进制数字转成二进制序列,然后上下排列整齐,再一个个比特位对应的操作一下就知道了,千万不要直接对十六进制数在脑子里进行比特位操作,会转不过来的。只有二进制对照的操作多了,就有感觉了。而对于比特位的操作,一位对一位的位运算,简直不能再简单了。

    最后将位操作之后的结果转为unsigned int类型的整数,就是最终的结果了。

文章来源:C++技术网原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。

返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)