• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

半字节交换的问题

瞎折腾 2017-08-21 浏览量:1084

在C语言中怎么实现两个8位数的高四位交换,或者第四位交换?

比如a=10110000,b=00001010,想叫他们交换完后成为10111011,怎么实现?

开始问题写错了,b的数值不是8位了,我修改了!

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • (A & 0xff <<4) | (B |  0xff >>4 )

    正解


    • 发布于 2017-08-24
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • 设置中间变量,进行数据的暂存,以保护其中一个数据。

    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 大致思路应该是这样的,由于论坛最近非法字太多,就用图片来表示吧:


    QQ截图20170821180905.png


    应该差不多是这么个意思。

    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 楼主,你可以把整数转换成字符串,然后字符串替换后再转回整型。这种方法,好理解,特别是在项目中,不容易出错。
    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 看楼主是否需要数据暂存,如果不需要的话可以用移位操作,这样就省得再开辟内存了(我比较抠。。。。)方法如下:

    u8 a,b;

    a=a>>4;

    b=b<<4;

    a=a|b;    //由于移位操作时用0补充,所以不用再&0x0f或者&0xf0


    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 狗头哥,他估计是描述写错了,其实就是想问该怎么交换。而且有歧义,这个8位数,是二进制还是十进制?我回答的就是按十进制来理解的。如果是字节的高4bit置换,直接清掉,然后按位与就行了。
    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般是这样的,清除掉a的低4位和b的高4位(清0),然后a与b进行位或运算

    清除的方法,位与0xf0清零低四位,位与0x0f清零高四位

    • 发布于2017-08-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

半字节交换的问题