文档章节

交换某个整数的奇数位和偶数位,使用指令越少越好

一贱书生
 一贱书生
发布于 2016/11/19 09:56
字数 391
阅读 55
收藏 0

/**

 * 功能:交换某个整数的奇数位和偶数位,使用指令越少越好(即,位0与位1交换,位2与位3交换,以此列推)。

 */

这题要交换的是整数二进制的奇数和偶数位。

按照一般的解题肯定会对每一位分别处理,即,将整数换成二进制,然后遍历一遍,交换奇数位和偶数位。这样效率不高,指令也不少。然后看大题目解析,感觉用位操作很棒,以下为解题思路:

(1)先操作奇数位,把101010(即0xAA)作为掩码,提取奇数位,并右移1位到偶数位置

(2)操作偶数位,把010101(即0x5555)作为掩码,提取偶数位,并左移一位到奇数位置

(3)将两次操作结果合并成一个值。

 

  1. /** 
  2.  * 思路:先操作奇数位,再操作偶数位。将数字n的奇数位右移1位,偶数位左移1位。 
  3.  * @param x 
  4.  * @return 
  5.  */  
  6. public static int swapOddEvenBits(int x){  
  7.     //奇数位右移,0xaaaa aaaa=10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101010b;  
  8.     int odd=(x&0xaaaaaaaa)>>1;  
  9.       
  10.     //偶数位左移,0x5555 5555=01010101 01010101 01010101 01010101 01010101 01010101 01010101 01010101b;  
  11.     int even=(x&0x55555555)<<1;  
  12.       
  13.     return odd|even;  

操作32位数时,掩码用8位十六进制即可,如果是64位,就要用16位十六进制掩码。

 

这样做的好处是,不需要将整数换成二进制,直接位操作返回的就是交换后的十进制整数,操作少。

© 著作权归作者所有

一贱书生
粉丝 20
博文 724
码字总数 600123
作品 0
私信 提问
glibc的字符串哈希算法

glibc中对于字符串的哈希实现的比较好,首先看一下这个算法的实现函数: static inline unsigned long int hash_string(const char *str_param) { unsigned long int hval, g; const char *...

晨曦之光
2012/04/10
232
0
编写一个程序交换某个整数的奇数位和偶数位

思路: 1,提取x的偶数位,向右平移一位,转变成奇数位a 2,提取x的奇数位,向左平移一位,转变为偶数位b 3,合并a和b,就完成了奇数位和偶数位的交换 实现: CC++ int ExchangeBit(int x){...

borey
2014/09/11
205
0
从发明新的排序算法开始扯淡(三,改进)

像这样简单的算法前人工程师肯定想到过,即使你是初学者,如果偶然发现了这个也并不稀罕,我也没有打算效仿郭小四窃他人成果自居,说到底这只是一篇系列扯淡文,它真正有价值的部分是由此延伸...

ueharaai
2012/09/22
3.8K
7
奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,偶数位于后半部分。 思路:这个题目要求把奇数放在数组的前半部分,偶数放在数组的后半部...

柠檬dream
2017/12/29
0
0
位运算小结

位操作基础 位运算符 Java还有一个无符号右移运算符>>>,强行右移,左侧补零。以及还有相应的复合运算符。 位操作只能用于整形数据,对 float 和 double 类型进行位操作会被编译器报错。 注意...

有苦向瓜诉说
2017/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部