c语言:用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

这篇具有很好参考价值的文章主要介绍了c语言:用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

                 用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

如:01,是1,交换完是10,是2.


思路

       1.分别取出奇数位上的数字和偶数位上的数字

                      举个例子:1001 0110                          1001 0110

        奇数位上的数字是   1001 0110             偶数位   1001 0110      —————————————————————————————————————————                                              0001 0100                           1000 0010

取出来的新二进制数只 保留奇数位或者偶数位上原数字,其余位用0替代。

  • 我们知道,0或者1&1都等于他本身,就能保留对应位上的数字,
  •                   1&0=0,0&0=0,就可以用&0取代不保留位置上的数字.

     2.用n&0101 0101取对应的奇数位,用n&1010 1010取对应的偶数位。

例子:                         1001 0110                                  1001 0110

        奇数位    &          0101 0101              偶数位   &    1010 1010                 

——————————————————————————————————————————

                                    0001 0100                                   1000 0010

0101就可以用0x555555表示,1010就用0xaaaaa表示。


3.将奇数位上的数字左移动1位,偶数位上的数字右移动1位,完成奇偶位交换

继续上面的例子,0001 0100<<1;1000 0010>>1.

4.用运算符|合并到一起,形成新数字(交换完成)

1|0=1;0|0=0;0|1=1。

                                              0010 1000

                                              0100 0001  |

______________________________________________________

                                              0110 1001


代码:

150是1001 0110

105是0110 1001文章来源地址https://www.toymoban.com/news/detail-804799.html

#define SWAPBIT(n) (((n)&0x55555555)<<1|((n)&0xaaaaaaaa)>>1)
#include<stdio.h>
int main()
{
	printf("%d", SWAPBIT(150));
}

效果:

c语言:用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。,c语言,c语言,数据结构,开发语言

到了这里,关于c语言:用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言:二进制、八进制、十六进制整数的书写及输出

    目录 一、整型数据类型 二、二进制、八进制、十六进制的书写 1)二进制 以 0b / 0B 开头,不区分大小写(数字0,而非字母o,下同) 2)八进制 以数字 0 开头         3)十六进制 以 0x / 0X 开头, 三、二进制、八进制和十六进制的输出 八进制   (%o): 十六进制   (%x):

    2024年02月05日
    浏览(65)
  • C语言每日一题之整数求二进制1的个数

    今天分享一道题目,用三种方法来求解 二进制1的个数 方法1 我们的十进制除10和取余数就可以得到我们每一位的数字,那我们的二进制也可 以 这是一种方法,另外一种就是我们可以用移位操作符来算 这个方法是不是也是特别妙呢,当然还有更妙的方法,请看!!! 相信看

    2024年02月15日
    浏览(58)
  • C++如何实现将一个整数转化为二进制数(使用尽量少的代码量)

    1、使用容器vector  这种方法非常简洁,当然使用数组也可以用不多的代码来进行实现。 将其转化为容易移植的函数如下: 注意在使用之前一定要#includevector头文件 2、一般数组实现 当然,还没有接触容器的小伙伴们也可以用普通的数组来进行实现,其算法仍然是通过对2取余

    2024年02月15日
    浏览(42)
  • 二进制链表转整数

    给你一个单链表的引用结点 head 。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 代码如下:

    2024年02月14日
    浏览(48)
  • leetcode 1290.二进制链表转整数

    🌟 leetcode链接:二进制链表转整数 ps: 代码:

    2024年02月14日
    浏览(59)
  • 进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

    目录 1.进制转换必备知识:         1.1 二进制逢2进1         8进制逢8进1           10进制逢10进1        16进制逢16进1         1.2为了区分二、八、十、十六进制,我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换         2.1 二进制转

    2023年04月23日
    浏览(95)
  • 【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

    目录 1.进制转换必备知识:         1.1 二进制逢2进1         8进制逢8进1           10进制逢10进1        16进制逢16进1         1.2为了区分二、八、十、十六进制,我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换         2.1 二进制转

    2024年02月05日
    浏览(257)
  • 写一个函数返回参数二进制中 1 的个数(c语言三种实现方法)

    (本文旨在自己做题时的总结,我会给出不同的解法,后面如果碰到新的题目还会加入其中,等于是我自己的题库。 方法一: 方法二: 这里说一个方法,任何一个进制数%它的进制位都可以得到它的最低位,任何一个进制数 / 它的进制位都可以将最低位丢弃。比如: 这样我

    2024年02月13日
    浏览(46)
  • MATLAB练习题:编写程序将十进制正整数转换为对应的二进制字符向量

     讲解视频:可以在bilibili搜索“MATLAB教程新手入门篇——数学建模清风主讲”。 MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili  编写程序将十进制正整数转换为对应的二进制字符向量。例如6对应的二进制字符向量为\\\'110\\\', 38对应的二进制字

    2024年02月02日
    浏览(49)
  • [保研/考研机试] KY30 进制转换-大整数转二进制 清华大学复试上机题 C++实现

    将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数) 输出描述: 每行输出对应的二进制数。 仍然是“除2取余法”,主要的区别在

    2024年02月13日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包