美文网首页C++杂文录程序员
二进制在C语言还有这样的操作?二进制不一样的炫酷,C语言小技巧

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

作者: C语言基础 | 来源:发表于2019-03-06 14:17 被阅读27次

如果数字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(转换大小写用这种写法,简直震惊了)

相关文章

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

    如果数字n是二进制表示01相间的数字,那么a=n+(n>>1)是一个全1的数字,b=a&(a+1)是二进制表示全0...

  • 小朋友学C语言(23):二进制与十进制之间的转换

    在学本节之前,请先复习 小朋友学C语言(17):二进制 一、二进制转换为十进制的C语言代码 运行结果: 思路:以"...

  • 汇编语言简介

    机器语言(二进制语言编写) -->汇编语言(形象化二进制)-->高级语言 汇编语言的特点:1>与硬件有关(不同的C...

  • C语言_文件

    @(C语言) [toc] 读文件 写文件 读写二进制文件

  • C++ Primer 摘抄1

    1. 基础知识 高级语言:接近自然语言的编程语言 编译器:将C++源程序代码转换为二进制文件 运行:操作系统读取二...

  • 位运算

    位运算简介 程序中所有数字在计算机的内存中都是以二进制形式存储,位运算是直接对二进制位进行操作。 C 语言中的 6...

  • C语言_内存和字符串

    @(C语言) [toc] 内存 c语言中内存分三个区: 程序区:存储程序的二进制文件 静态存储区:全局变量和静态变...

  • shell介绍

    语言分类 任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。 有的编程语言,如 C/C++、Pascal...

  • 一篇文章详解C/C+语言位运算,快来围观吧!

    位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只...

  • C语言位运算(上)

    位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/xobtpqtx.html