我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: c问题共同讨论一下~ 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ slow /sləu/ a. 慢的,缓慢的,迟纯的;v. (使)放慢,(使)减速 ]


c问题共同讨论一下~

有8个字节,每个字节第一位是空的,没有用,现在要将每个字节的这第一位用起来,
就是将每个字节左移一位,后面字节又跟着补上来,即第一个字节左移一位,第二个就左移两位....第八个字节左移八位.
这样8个字节的存储就变成了7个字节,省出一个字节.

写一函数实现这一功能

void saveMemory(char* source,char* dest)
{
    //source为8个字节的输入参数,dest变成了7个字节的输出参数
}

做出来了,但是感觉有点复杂
希望高人们赐教
顶端 Posted: 2008-02-23 16:52 | [楼 主]
zhoubaozhou





性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 696
威望: 0
浮云: 1082
在线等级:
注册时间: 2007-03-13
最后登陆: 2023-01-26

5come5帮你背单词 [ remove /ri'mu:v/ v. 除去,脱掉,消除,移动,移开,免职,开除 ]


memcpy这个函数就可以实现你要的功能了~~
这样做的意义好像不是很大,编译器会自动对齐的,像7个字节的会自动对齐到8个字节,这样可以优化效率.
顶端 Posted: 2008-02-23 17:00 | [1 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ digit /'did3əit/ n. 数字,数位,数码 ]


我没有理解你的意思
我的意思是
比如 一个8字节的串7f-7f-7f-7f-7f-7f-7f-7f
运算后得到ff-ff-ff-ff-ff-ff-ff
十六进制表示
顶端 Posted: 2008-02-23 17:06 | [2 楼]
zhoubaozhou





性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 696
威望: 0
浮云: 1082
在线等级:
注册时间: 2007-03-13
最后登陆: 2023-01-26

5come5帮你背单词 [ modernization /modənai'zeiən/ n. 现代化 ]


Quote:
引用第2楼perfect_刘于2008-02-23 17:06发表的  :
我没有理解你的意思
我的意思是
比如 一个8字节的串7f-7f-7f-7f-7f-7f-7f-7f
运算后得到ff-ff-ff-ff-ff-ff-ff
十六进制表示


用移位来实现,应该效率很高的
顶端 Posted: 2008-02-23 17:12 | [3 楼]
zhoubaozhou





性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 696
威望: 0
浮云: 1082
在线等级:
注册时间: 2007-03-13
最后登陆: 2023-01-26

5come5帮你背单词 [ sponsor /'sponsə/ n. 提倡者,倡导者,资助者,赞助者;vt. 发起,主办 ]


不用移位也可以直接将数据搬过去吗~每次搬7bit
顶端 Posted: 2008-02-23 17:13 | [4 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ couple /'kΛpl/ n. 县 ]


Quote:
引用第3楼zhoubaozhou于2008-02-23 17:12发表的  :


用移位来实现,应该效率很高的


呵呵 是每个byte中的第一个bit没有用 是移位
就是想见识下你的高招了~
顶端 Posted: 2008-02-23 17:14 | [5 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ eastwards // ad. & a. 向东方(的),朝东(的);东部 ]


Quote:
引用第4楼zhoubaozhou于2008-02-23 17:13发表的  :
不用移位也可以直接将数据搬过去吗~每次搬7bit

怎么个搬法
我就是不晓得
应该不能位访问吧
顶端 Posted: 2008-02-23 17:17 | [6 楼]
zhoubaozhou





性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 696
威望: 0
浮云: 1082
在线等级:
注册时间: 2007-03-13
最后登陆: 2023-01-26

5come5帮你背单词 [ task /ta:sk/ n. 任务,作业,工作 ]


Quote:
引用第6楼perfect_刘于2008-02-23 17:17发表的  :

怎么个搬法
我就是不晓得
应该不能位访问吧


用64位的,将它每7个bit每7个bit搬进去就可以了吗

long long tmp;

tmp |= ((k&0x7f)<<(pointer));

GCC的语法
顶端 Posted: 2008-02-23 20:08 | [7 楼]
perfect_刘



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 960
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-11-20
最后登陆: 2009-05-08

5come5帮你背单词 [ nuisance /'nju:sns/ n. 讨厌的东西 ]


Quote:
引用第7楼zhoubaozhou于2008-02-23 20:08发表的  :


用64位的,将它每7个bit每7个bit搬进去就可以了吗

long long tmp;
.......

恩 比较简单
谢了
顶端 Posted: 2008-02-23 22:58 | [8 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.008358(s) query 5, Time now is:11-22 04:31, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号