| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1884 人关注过本帖
标题:[讨论]位移!
只看楼主 加入收藏
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

/*只用左右移位和一次减法的实现方法 */
#include<stdlib.h>
#include<stdio.h>
int xbyte3(unsigned word, int bytenum )
{
return ((word>>(bytenum<<3))<<24>>24)-((word>>(bytenum<<3))>>7<<31>>23);
}
int main()
{
printf("%x", xbyte3( 0xE010ffff,3) );
return 0;
}


英者自知,雄者自胜
2007-11-04 21:58
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

为什么不考虑bytenum>3啊?


方寸之内,剖天下; 方坛之内,析自我;
2007-11-04 22:28
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

自己觉得方法难了点,而且用的特殊的量太多了!


方寸之内,剖天下; 方坛之内,析自我;
2007-11-04 22:29
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 
bytenum的检测if ((~0&lt;&lt;2)&amp; bytenum)

方寸之内,剖天下; 方坛之内,析自我;
2007-11-04 22:38
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 
以下是引用leeco在2007-11-4 18:34:20的发言,还须解答
以下是引用leeco在2007-11-4 18:34:20的发言:
缺少符号扩展
int xbyte(packed_t word ,int bytenum)
{
return (((word>>(bytenum<<3))&0x80)?((word>>(bytenum<<3))&0xff|0xffffff00):((word>>(bytenum<<3))&0xff));
}

首先>>的优先级大于&的所以((word>>(bytenum<<3))&0x80)可以改为(word>>(bytenum<<3)&0x80)
第二,在扩展是先是将0xff进行转换,变为 unsiged ,unsigned 的扩展是无符号扩展!


方寸之内,剖天下; 方坛之内,析自我;
2007-11-04 23:40
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
以下是引用yangzhifu在2007-11-4 22:38:59的发言:
bytenum的检测if ((~0<<2)& bytenum)


((~0<<2)& bytenum :bytenum 为 0、1、2、3 是返回假

[此贴子已经被作者于2007-11-5 22:46:06编辑过]


—>〉Sun〈<—
2007-11-04 23:50
crazyboy216
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-28
收藏
得分:0 
学习了..
2007-11-05 13:57
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

我还需要答复!


方寸之内,剖天下; 方坛之内,析自我;
2007-11-05 19:38
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
以下是引用yangzhifu在2007-11-4 23:40:54的发言:

首先>>的优先级大于&的所以((word>>(bytenum<<3))&0x80)可以改为(word>>(bytenum<<3)&0x80)
第二,在扩展是先是将0xff进行转换,变为 unsiged ,unsigned 的扩展是无符号扩展!

unsigned只是个幌子,是没有意义的,你用float,甚至用double* 类型都一样,你管他unsigned的扩展是不是无符号扩展干嘛

2007-11-06 21:38
快速回复:[讨论]位移!
数据加载中...
 
   



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

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