鱼C论坛

 找回密码
 立即注册
查看: 828|回复: 6

[已解决]请问这道题目怎么做?没有接触过类似的。。。

[复制链接]
发表于 2020-6-23 22:01:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
用C语言实现将数组如 unsigend char a[4]={0×11,0×22,0×33,0×44},转换成一个32位的整型数i=0×11223344;
在以下语句基础上完成程序设计

unsigned char a[4]={0×11,0×22,0×33,0×44};
int i = 0;

初学C不久,如果大佬在写答案之余愿意说一下思路,或者对应的书上的知识点就更好了,在此先谢过。
最佳答案
2020-6-23 22:09:15
int main() {
    usigned char a[4]  = {0x12, 0x34, 0x56, 0x78};
    unsigned int result = 0;
    for (int i=0; i<4; i++) {
        result = result << 8 | a[i];
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-23 22:09:15 | 显示全部楼层    本楼为最佳答案   
int main() {
    usigned char a[4]  = {0x12, 0x34, 0x56, 0x78};
    unsigned int result = 0;
    for (int i=0; i<4; i++) {
        result = result << 8 | a[i];
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-23 23:16:49 | 显示全部楼层

感谢大佬回答,我有点疑问,请问result = result << 8 | a[i];里的左移8位为什么不会发生高位舍去的现象?比如说第一次左移后为0x0000 0000,在与0x12发生或运算后为0x0000 0012,在第二次循环中,又左移了8位,这里不会发生超过8位所以舍去高位的现象吗?为什么我在调试时发现循环中0x12左移8位之后为0x1200?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 08:12:25 | 显示全部楼层
你把11乘1000,22乘100,33乘10加上44不就好了?一样的道理!
i=a[0]*0x1000+a[1]*0x100+a[2]*0x10+a[3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 10:54:34 | 显示全部楼层
Sum9527 发表于 2020-6-23 23:16
感谢大佬回答,我有点疑问,请问result = result

第一,0x12 << 8 == 0x1200 是没有问题的
第二,你说错了,不是与(&),应该是或(|)
第三,只要保存结果的精度超过 32 位无符号整型就不会溢出,因为你一共就 4 个 8 位数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 23:15:23 | 显示全部楼层
本帖最后由 Sum9527 于 2020-6-26 23:42 编辑


回复晚了,不好意思,谢谢大佬解惑,已经明白问题在哪了。
因为是16进制,16进制里的1位等于二进制的4位,所以二进制左移8位相当于16进制左移2位。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 23:28:07 | 显示全部楼层
405794672 发表于 2020-6-24 08:12
你把11乘1000,22乘100,33乘10加上44不就好了?一样的道理!
i=a[0]*0x1000+a[1]*0x100+a[2]*0x10+a[3]

感谢你的回答,感觉你的这个答案比较适合我,不过最佳答案已经给出去了,不好意思啦。
不过可能要更改下,直接用你的答案没有得到想要的结果,因为少了个0。
改成:i =a[0]*0x1000000+a[1]*0x10000+a[2]*0x100+a[3] ;就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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