| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 455 人关注过本帖
标题:20分的问题
只看楼主 加入收藏
楚门的时间
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-11-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
20分的问题
一个C语言中结构位域写法的问题
原来的写法:

typedef union
        {   unsigned char Switch;
            struct
            {
                unsigned  BIT0:   1;
                unsigned  BIT1:   1;
                unsigned  BIT2:   1;
                unsigned  BIT3:   1;
                unsigned  BIT4:   1;
                unsigned  BIT5:   1;
                unsigned  BIT6:   1;
                unsigned  BIT7:   1;                           
             } BITS;                  
          } SWITCH;
            SWITCH    InPut;
#define  input0    InPut.BITS.BIT0
#define  input1     InPut.BITS.BIT1
#define  input2    InPut.BITS.BIT2
#define  input3    InPut.BITS.BIT3
#define  input4    InPut.BITS.BIT4
#define  input5    InPut.BITS.BIT5
#define  input6    InPut.BITS.BIT6
#define  input7    InPut.BITS.BIT7

问题1:我觉得这样写过于累赘(我是新手,不知道为什么要写成这样),能不能下面这种写法实现同样功能?
问题2:unsigned  BIT0: 中只有0和1的变化,直接写BIT0: 可以不可以??

struct  bits
            {
                unsigned  BIT0:   1;
                unsigned  BIT1:   1;
                unsigned  BIT2:   1;
                unsigned  BIT3:   1;
                unsigned  BIT4:   1;
                unsigned  BIT5:   1;
                unsigned  BIT6:   1;
                unsigned  BIT7:   1;                           
             } Switch;
#define  input0    Switch.BIT0
#define  input1     Switch.BIT1
#define  input2    Switch.BIT2
#define  input3    Switch.BIT3
#define  input4    Switch.BIT4
#define  input5    Switch.BIT5
#define  input6    Switch.BIT6
#define  input7    Switch.BIT7
这样的话结果是一样的,定义了一个一个字节的变量Switch,并且可以对这个字节变量进行位操作,有简单的写法为什幺要多写几行字??
搜索更多相关主题的帖子: C语言 
2010-11-18 11:08
楚门的时间
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-11-16
收藏
得分:0 
好吧,我等了半个钟头,一个一看就能明白的问题值20分,40个人看过,0人理我
"囧"字已不能表达我的心情了

验证码一堆,还好我不是色盲。。。
2010-11-18 11:22
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:5 
你既然明白了 又何必还要来问呢!
前者明显的便于操作, 对于赋值 提取 转换 操作都要比你自己写的容易 方便!
2010-11-18 11:25
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:5 
问题1:我觉得这样写过于累赘(我是新手,不知道为什么要写成这样),能不能下面这种写法实现同样功能?
问题2:unsigned  BIT0: 中只有0和1的变化,直接写BIT0: 可以不可以??

这个问题你完全可以自己慢慢调试呀,不要总依赖别人.

经验积累中............
2010-11-18 11:55
楚门的时间
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-11-16
收藏
得分:0 
以下是引用hahayezhe在2010-11-18 11:25:46的发言:

你既然明白了 又何必还要来问呢!
前者明显的便于操作, 对于赋值 提取 转换 操作都要比你自己写的容易 方便!
我虽然明白意思,但我不知道两者的优劣在哪里
前者明显的便于操作,怎么个明显法??我感觉后者比较好,明显我的基础构架认知出现了问题。。

[ 本帖最后由 楚门的时间 于 2010-11-18 15:12 编辑 ]

验证码一堆,还好我不是色盲。。。
2010-11-18 15:10
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
比如我要查看 char c=0x11;的bit位
前面的可以直接 InPut.Switch = c;
而你的需要 Switch  = reinterpret_cast<Switch> c;
如果是数组呢,字符串呢?

或者说我要查看 InPut整个字节的值 写成你那样,我还要去拷贝到一个char才能看?而前面的可以通过Switch 直接获取整个字节
2010-11-18 15:20
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:5 
问个问题需要这么拽吗
2010-11-18 15:27
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:5 
以下是引用hahayezhe在2010-11-18 15:20:00的发言:

比如我要查看 char c=0x11;的bit位
前面的可以直接 InPut.Switch = c;
而你的需要 Switch  = reinterpret_cast c;
如果是数组呢,字符串呢?

或者说我要查看 InPut整个字节的值 写成你那样,我还要去拷贝到一个char才能看?而前面的可以通过Switch 直接获取整个字节
严重同意!

南国利剑
2010-11-18 17:45
快速回复:20分的问题
数据加载中...
 
   



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

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