幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2274|回复: 4

[通用编程] 位移的问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-9-16 17:02:31 | 显示全部楼层 |阅读模式
#include<stdio.h>
void main()
{
    unsigned int i,bits,c;
    scanf("%x",&i);
    bits=i>>(16-4);
    c=i<<4;
    c=c|bits;
    printf("i=%x \nc=%x\n",i,c);
}
这是将一个整数循环左移4位的运算,
输入fe13
i=fe13;
c=e13f;
在VC++中怎么才可以实现相同的效果呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

23

主题

218

帖子

2470

积分

⑥精研

积分
2470
发表于 2007-9-16 18:33:43 | 显示全部楼层
可以用下面的宏实现
  1. #define ROL(x, y) ( (((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
  2. #define ROR(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
复制代码

把这两行复制到文件开头就可以当函数使用
ROL(x, y)    =>    返回把32位整数x循环左移y位的结果
ROR(x,y)    =>    同上,右移
ONScripter for PSP/Windows中文版 http://blog.163.com/john_he_
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-9-16 19:13:37 | 显示全部楼层
[s:5] 真有够复杂的, UL是什么东东
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

23

主题

218

帖子

2470

积分

⑥精研

积分
2470
发表于 2007-9-16 19:36:43 | 显示全部楼层
UL = unsigned long,写在整数后面表示把该整数当作unsigned long类型处理。

其实也不一定要用上面的实现,只要用好移位和位屏蔽(与操作)要实现循环移位不难,只是上面那个比较通用而已……
ONScripter for PSP/Windows中文版 http://blog.163.com/john_he_
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-9-16 21:39:08 | 显示全部楼层
其實只要把int 寫明確為 short int 便可以了

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-2 12:25 , Processed in 0.029008 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表