| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 901 人关注过本帖
标题:问一个关于位运算的问题
只看楼主 加入收藏
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
结帖率:100%
收藏
 问题点数:0 回复次数:10 
问一个关于位运算的问题
有一个16位的值(16-bits),低三位(bits 0-2)是随机的无用值,高位(bits 3–15)代表一个正数。

换句话说,我们就是要把这个16位的值,提取出它13位的有用值,转化为 ushort (无符16位整数)。

最后,大家必要鄙视我···


搜索更多相关主题的帖子: 问题 
2011-06-25 11:17
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>

typedef unsigned short ushort;

int main(void) {
    ushort n;
    scanf("%hu", &n);
    n >>= 3;
    printf("%hu\n", n);
}


[ 本帖最后由 lz1091914999 于 2011-6-25 11:26 编辑 ]

My life is brilliant
2011-06-25 11:24
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
unsigned short var=123;
printf("%i",(var>>3)&0x1fff));

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-25 11:28
wuzhanghao88
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:146
注 册:2009-10-25
收藏
得分:0 
版主发的说,占个位!  硬件语言用得多,比如单片机,3楼用得很好的!
2011-06-25 20:46
thunder_2011
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:100
注 册:2011-4-11
收藏
得分:0 
以下是引用ansic在2011-6-25 11:28:07的发言:

unsigned short var=123;
printf("%i",(var>>3)&0x1fff));



&0x1fff 这个想法不错,学习了!

ps: 移位的方向是不是和大小端也有关系呢?
2011-06-26 00:00
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
以下是引用ansic在2011-6-25 11:28:07的发言:

unsigned short var=123;
printf("%i",(var>>3)&0x1fff));


正解,考虑到了负数右移时的补1。

—>〉Sun〈<—
2011-06-26 00:02
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:0 
我说一下,首先,这的确是与硬件相关的,这是微软提供的一种硬件的SDK里面的数据。
数据的简介,就是我刚描述的那样。

微软的示例代码是:USHORT Depth = (s & 0xfff8) >> 3;  (其中 s 就是需要处理的数据)。

我无法理解,而且也与你们的不一样。从逻辑上而言,只能肯定需要处理的数据不会是负数。
但是我实在想不通,这个 & 0xfff8 的用处,是干嘛?

(づ ̄ 3 ̄)づ
2011-06-26 02:34
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:0 
我说一下,首先,这的确是与硬件相关的,这是微软提供的一种硬件的SDK里面的数据。
数据的简介,就是我刚描述的那样。

微软的示例代码是:USHORT Depth = (s & 0xfff8) >> 3;  (其中 s 就是需要处理的数据)。

我无法理解,而且也与你们的不一样。从逻辑上而言,只能肯定需要处理的数据不会是负数。
但是我实在想不通,这个 & 0xfff8 的用处,是干嘛?

(づ ̄ 3 ̄)づ
2011-06-26 02:34
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
大概是因为在这种硬件上 >> 表示循环右移
2011-06-26 02:37
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 6楼 cosdos
是unsigned short,右移时左边不会补1,加上与不就多于了?

My life is brilliant
2011-06-26 10:38
快速回复:问一个关于位运算的问题
数据加载中...
 
   



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

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