二进制在C语言还有这样的操作?二进制不一样的炫酷,C语言小技巧

如果数字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的个数。

更多精彩C/C++学习乐园:648778840

求一个数的二进制表达中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是默认不写出来的,但是不写出来不代表没有啊)。

更多精彩C/C++学习乐园:648778840

异或的特征,相同的数字异或为0,0异或任何数字都是任何数字。可以利用异或来找到数组中只出现过一次的元素。

更多精彩C/C++学习乐园:648778840

不使用其他空间,交换两个值,32就是97和65的异或值(大小写字母ASCII码之间的异或值)

使用ASCII码和异或的性质,实现大小写的相互转换:s[index]^=(1<<5)

C++中,A–65,a–97,异或表示不考虑进位的加法65^32=97,97^32=65(转换大小写用这种写法,简直震惊了)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进制基本概念 什么是进制?进制是一种计数的方式,数值的表示形式 常见的进制十进制、二进制、八进制、十六进制 进制书...
    极客江南阅读 6,286评论 0 11
  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 3,940评论 0 0
  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 8,319评论 1 9
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,906评论 0 2
  • 十进制--->二进制 对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次...
    张轻舟阅读 4,707评论 1 3

友情链接更多精彩内容