网站首页 > 技术文章 正文
- 如果数字n是二进制表示01相间的数字,那么a=n+(n>>1)是一个全1的数字,b=a&(a+1)是二进制表示全0的数字。
- 判断一个数字n是否是2的次幂的最快的方式:如果数字n是2的次幂,那么它的二进制表示只有一位是1,其余位都是0,那么n&(n-1)=0。
- 求一个数的二进制表达中1的个数,有个技巧。(当然,python的话可以直接count('1'))
假如x是一个二进数,例如x=0xfffa(1111 1111 1111 1010),要实现去掉最低位一个1,可进行的操作是x&=(x-1),此时x==0xfff8(1111 1111 1111 1000)。基于该思想,利用while循环对(x)判断,可实现计算二进制数中所有位上1的个数。
- 求一个数的二进制表达中0的个数
假如x是一个二进数,例如x=0xfffa(1111 1111 1111 1010),要实现去掉最低位一个0,可进行的操作是x|=(x+1),此时x==0xfffb(1111 1111 1111 1011) ;再去掉一个0,同样,x|=(x+1),则x==0xffff。如果x的2字节表示,则(x+1)为0。基于该思想,利用wile循环对(x+1)判断,可实现计算二进制数中所有位上0的个数。注意,x=1时,1的高位默认有0的(注意是所有位而不是写出来的位上,因为二进制高位的0是默认不写出来的,但是不写出来不代表没有啊)。
- 异或的特征,相同的数字异或为0,0异或任何数字都是任何数字。可以利用异或来找到数组中只出现过一次的元素。
- 不使用其他空间,交换两个值,32就是97和65的异或值(大小写字母ASCII码之间的异或值)
- 使用ASCII码和异或的性质,实现大小写的相互转换:s[index]^=(1<<5)
- C++中,A–65,a–97,异或表示不考虑进位的加法65^32=97,97^32=65(转换大小写用这种写法,简直震惊了)
猜你喜欢
- 2024-10-18 了解C语言中的操作符(c语言操作符怎么定义)
- 2024-10-18 20天轻松入门《C++第二章——程序设计基础》—3经坛教育
- 2024-10-18 C++中的volatile关键字(volatile关键字 c语言)
- 2024-10-18 C/C++软件开发证书怎么考?报考难度大吗?含金量高吗?
- 2024-10-18 c++数据类型(c++数据类型转换)
- 2024-10-18 C语言中实现边沿函数算法及应用,这是抛弃PLC留下的痛!
- 2024-10-18 C基础、经典问题:交换a、b值较好的方法?
- 2024-10-18 C++ 避免使用模块重新编译模板库(调用c++模块,不忽略异常)
- 2024-10-18 面试大厂c/c++后台开发岗,如何从技术层面上杀出重围?
- 2024-10-18 关于C语言交换两个数的实现方法以及个人心得
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)