| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 648 人关注过本帖, 1 人收藏
标题:关于按位运算符的练习题 希望能给各位初学者一点帮助
只看楼主 加入收藏
瓦尔德的田野
Rank: 2
等 级:论坛游民
帖 子:18
专家分:22
注 册:2012-9-29
结帖率:100%
收藏(1)
 问题点数:0 回复次数:3 
关于按位运算符的练习题 希望能给各位初学者一点帮助
相信大家在初学按位运算符的时候都会遇到这样一个让你将16进制的ABC翻转为CBA的题目,对于将按位运算符运用到变量中时,作为新手的我一开始也很迷惑,不过经过了多次运算测试。。。。终于能分析出其代码的流程了,下面我将这段代码与分析写出来,以便于各位和我一样的新手能充分理解。

代码如下:

/* 程序3.10 学习按位运算符 */
#include <stdio.h>
void main()
{
    unsigned int original=0xABC;     /*声明一个无符号int整型变量“原型”的初始值为16进制的10 11 12 */
    unsigned int result=0;           /*声明一个无符号int整型变量“结果”的初始值为 0 */
    unsigned int mask=0xF;           /*声明一个无符号int整型变量“掩码”的初始值为16进制的 15 */

    printf("\n 原型 = %X",original);  /*输出“原型”的初始值ABC转换成16进制为10 11 12 */

    result|=original&mask;   /*result按位或original和mask的值 得到结果:0000 0000 0000 1100 */

    original>>=4;            /*original按位右移4位 得到结果:0000 0000 1010 1011 */
    result<<=4;              /*result按位左移4位 得到结果:0000 0000 1100 0000 */
    result|=original&mask;   /*result按位或original和mask的值 得到结果:0000 0000 1100 1011 */

    original>>=4;            /*original按位右移4位 得到结果:0000 0000 0000 1010 */
    result<<=4;              /*result按位左移4位 得到结果:0000 1100 1011 0000 */
    result|=original&mask;   /*result按位或original和mask的值 得到结果:0000 1100 1011 1010 */
   
    printf("\t\a结果 = %X \n\n",result);  /*二进制数 0000 1100 1011 1010 转换为16进制是 12 11 10 也就是CBA */
}


分析:其实我在注释里面就已经列出了分析,不过便于大家理解,我将其所有步骤都写出来。
首先第一步将变量original的16进制值转换成二进制:0000 1010 1011 1100 ;result转换成二进制:0000 0000 0000 0000 ;mask转换成二进制: 0000 0000 0000 1111
1.第一组运算
(1)result|=original&mask;
0000 1010 1011 1100
&
0000 0000 0000 1111
--------------------
0000 0000 0000 1100
|
0000 0000 0000 0000
--------------------
0000 0000 0000 1100(result结果1)

(2)original>>=4;
0000 1010 1011 1100
>>4
--------------------
0000 0000 1010 1011(original结果1)
(3)result<<4;
0000 0000 0000 1100
<<4
-------------------
0000 0000 1100 0000(result结果2)

2.第二组运算
(1)result|=original&mask;
0000 0000 1010 1011
&
0000 0000 0000 1111
--------------------
0000 0000 0000 1011
|
0000 0000 1100 0000
--------------------
0000 0000 1100 1011(result结果3)

(2)original>>=4;
0000 0000 1010 1011
>>4
--------------------
0000 0000 0000 1010(original结果2)
(3)result<<=4;
0000 0000 1100 1011
<<4
--------------------
0000 1100 1011 0000(result结果4)

3.最后一组运算
(1)result|=original&mask;
0000 0000 0000 1010
&
0000 0000 0000 1111
--------------------
0000 0000 0000 1010
|
0000 1100 1011 0000
-------------------
0000 1100 1011 1010(result结果5)

最后将result的结果5从二进制转换成16进制得出数值 12 11 10,也就是CBA.希望能给大家帮助。


搜索更多相关主题的帖子: 练习题 include original 声明 
2012-10-20 21:19
a646404908
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:189
专家分:492
注 册:2012-2-14
收藏
得分:0 
其实 我也是对位运算不是很懂  好像很复杂 就没有学下去了 直接跳过
2012-10-20 22:26
mmrx
Rank: 2
等 级:论坛游民
帖 子:42
专家分:71
注 册:2012-10-18
收藏
得分:0 
谢谢楼主分享!!
2012-10-20 23:09
梅可伟
Rank: 2
等 级:论坛游民
帖 子:16
专家分:65
注 册:2012-10-19
收藏
得分:0 
谢谢楼主分享
2012-10-24 15:26
快速回复:关于按位运算符的练习题 希望能给各位初学者一点帮助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043330 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved