交换二进制奇偶位(算法)

Write a program to swap odd and even bits in an integer with as few instructions as possible.

public static int swapOddEvenBits(int x)
{
	return ( (( x & 0xaaaaaaaa) >> 1 | (x & 0x55555555) << 1) );
}
时间: 2024-11-08 12:28:32

交换二进制奇偶位(算法)的相关文章

【C语言】用宏实现一个整形奇偶位交换

//用宏实现一个整形奇偶位交换 //例如6为0000..0110,交换完为0000..1001,即为9 #include <stdio.h> #define EXCHANGE(num) ((num&(0x55555555))<<1)|((num&(0xaaaaaaaa))>>1) //取出奇数位左移,取出偶数位右移,最后相加 int main() { printf("%d\n", EXCHANGE(6)); //9 printf(&q

二进制的位运算

二进制的位运算: 1.按位与 & 1)清零.如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零. 2)取数中指定位.取对应x位,该数的对应位为1,其余位为零.可以得到x位的指定位数. 2.按位或  | 1)常用来对一个数的某个位,置1. 3.异或运算 ^ 1)使特定位翻转,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可. 2)与0相异保留原值. 值交换的方法:1.借助第三变量来实现:C=A;A=B;B=C; 2.利用加减法实现两个变量

【c语言】写一个宏定义,实现的功能是将一个int型的数的奇偶位互换

// 写一个宏定义,实现的功能是将一个int型的数的奇偶位互换,例如6的二进制为0110,第一位与第二位互换, // 第三位与第四位互换,得到1001,输出应该为9 #include <stdio.h> // 取出奇数位与偶数位,奇数位左移1位,偶数位一位,相加或者相或 #define EXCHANGE(num) (((0x55555555 & num) << 1) + ((0xaaaaaaaa & num) >> 1)) int main() { pr

排序算法系列:奇偶排序算法

概述 在上一篇中我们说到了冒泡排序的原理及实现详解.冒泡排序是一种交换排序,本文还是接着上一讲,说说另一种交换排序算法--奇偶排序. 版权说明 本文链接:http://blog.csdn.net/lemon_tree12138/article/details/50605563 – Coding-Naga - 转载请注明出处 目录 概述 版权说明 目录 奇偶排序算法 算法原理 算法原理图 算法步骤 算法可行性证明 算法过程图 算法实现 算法复杂度分析 Ref GitHub源码下载 奇偶排序算法 奇

二进制最大公约数算法

求最大公约数的Euclid算法需要用到大量的取模运算,这在大多数计算机上是一项复杂的工作,相比之下减法运算.测试数的奇偶性.折半运算的执行速度都要更快些. 二进制最大公约数算法避免了Euclid算法的取余数过程. 二进制最大公约数基于下述事实: 若a.b都是偶数,则gcd(a,b)=2*gcd(a/2,b/2) 若a是奇数.b是偶数,则gcd(a,b)=gcd(a/2,b/2) 若a.b都是奇数,则gcd(a,b)=gcd((a-b)/2,b) 因此可写出二进制最大公约数算法如下(C语言版):

奇偶位互换

Problem Description 给定一个长度为偶数位的0,1字符串,请编程实现串的奇偶位互换. Input 输入包含多组测试数据:输入的第一行是一个整数C,表示有C测试数据:接下来是C组测试数据,每组数据输入均为0,1字符串,保证串长为偶数位(串长<=50). Output 请为每组测试数据输出奇偶位互换后的结果:每组输出占一行. Sample Input 2 0110 1100 Sample Output 1001 1100 1 #include <stdio.h> 2 #in

一种节省空间的交换变量的基本算法

一种节省空间的交换变量的基本算法,一个很简单的算法 因为其中没有引入temp变量,所以可以节省空间 代码如下: 一种节省空间的交换变量的基本算法

(九)二进制、位运算、位移运算符

JavaSE(九) --二进制.位运算.位移运算符 一.二进制简介 现代电子计算机全部采用的是二进制,因为它只使用0,1两个数字符号,简单方便.数字电路中,1代表高电平,2代表低电平.这样,数据的传输通过控制电平的高低就可以了.计算机内部处理信息,都是采用二进制数来表示的.二进制(Binary)数用0和1的两个数字及其组合来表示任何数,进位规则是"逢二进一",按从右至左的顺序,右低位,左高位. 二.二进制基础 1.所有的二进制数最高位代表符号位,0表示正数,1表示负数. 2.一个字节等

关于二进制以及位运算

聊到二进制以及位运算就不得不说说,原码,反码,补码了,网上对于原码反码补码的解释过于复杂,我这里把教程里的一些总结搬出来让大家参考一下:对于有符号的而言; 1.二进制最高位是符号位,0表示正数,1表示负数: 2.正数的原码反码补码都一样: 3.负数的反码等于它的原码符号位不变,其他位取反,1变0,0变1: 4.负数的补码等于它的反码+1: 5.0的反码补码都是0: 6.PHP没有无符号数: 7.在计算机运算时,都是以补码的方式来运算的: 所以当你进行位运算时,应把变量的补码求出后进行运算之后,再