表达式x=x&(x-1)的作用

简介: 表达式"x=x&(x-1)" x = x & (x - 1)含义:这条语句执行一次,就会把x用二进制格式表示时的最右边的一个二进制1变为二进制0,因为x-1会将该位(x用二进制表示时最右边的一个二进制1)变为0; 应用1:把一个整数用二进...

表达式"x=x&(x-1)"

x = x & (x - 1)
含义:这条语句执行一次,就会把x用二进制格式表示时的最右边的一个二进制1变为二进制0,因为x-1会将该位(x用二进制表示时最右边的一个二进制1)变为0;

应用1:把一个整数用二进制表示时,其中二进制1的个数;
int Func(int x)
{
  int count = 0;
  while(x)
  {
    x = x & (x - 1);
    count++;
  }
  return count;
};
设x=9999,其二进制格式为: 10011100001111; 则count=8;
思路:将x转化为二进制格式,统计一下含有的二进制1的个数;

应用2:判断一个整数(x)是否是2的n次方;
int Func(int x)
{
  if((x & (x - 1)) == 0)
  {
    return 1;  //是
  }
  else
  {
    return 0;  //否
  }
};
思路:如果一个整数是2的n次方,那么,这个数用二进制表示时,其最高位为二进制1,其余位为二进制0;

转自博客:
http://bdxnote.blog.163.com/blog/static/8444235201098114933669/

相关文章
|
5月前
|
C#
C#动态查询:巧用Expression组合多条件表达式
在C#中,利用`Expression`类和`AndAlso`、`OrElse`方法,可以组合两个`Expression<Func<T, bool>>`以实现动态多条件查询。该方法通过构建表达式树,方便地构建复杂查询。示例代码展示了如何创建表达式树,分别检查年龄大于等于18和姓名为"John"的条件,并使用`AndAlso`组合这两个条件,最终编译为可执行的委托进行测试。
205 1
|
5月前
|
Python
什么是语句?什么是表达式?怎么区分?
编程语言中的语句和表达式是基础概念。语句是执行操作或命令的代码行,如Python的`print("Hello, World!")`,通常以换行符结束。表达式则表示值或计算过程,如`2 + 2`,可赋值给变量或用于计算。语句侧重于执行动作,表达式侧重于计算值。表达式可含运算符、变量等,而语句由主语和谓语构成。示例中,`x = 10`和`print("Hello, World!")`是语句,`y = x + 5`和`result = a * b + c`是表达式。
|
5月前
|
C++
C++语言中Switch语句循环和作用类型
C++语言中Switch语句循环和作用类型
68 0
|
5月前
|
C++ 容器
C++语言中for语句循环和作用类型
C++语言中for语句循环和作用类型
75 0
|
5月前
|
开发框架 .NET 编译器
C# 9.0中的目标类型新表达式:类型推断的又一进步
【1月更文挑战第16天】C# 9.0引入了目标类型新表达式,这是类型推断功能的一个重要扩展。通过目标类型新表达式,开发者在创建对象时可以省略类型名称,编译器会根据上下文自动推断所需类型。这一特性不仅简化了代码编写,还提高了代码的可读性和维护性。本文将详细介绍目标类型新表达式的语法、使用场景及其对C#编程的影响。
|
算法
6.解析表达式算法
6.解析表达式算法
|
数据库
机房重构—在应使用条件的上下文(在 ‘where‘ 附近)中指定了非布尔类型的表达式
在应使用条件的上下文(在 ‘where‘ 附近)中指定了非布尔类型的表达式
195 0
三元表达式竟然可以这样玩(多条件判断无限嵌套)
三元表达式竟然可以这样玩(多条件判断无限嵌套)
66 0
|
存储 Unix 编译器
表达式求值过程中会发生哪些隐藏的变化?求值顺序又由什么决定?——详解C表达式求值中的隐式类型转换,算术转换问题,以及操作符的属性
表达式求值过程中会发生哪些隐藏的变化?求值顺序又由什么决定?——详解C表达式求值中的隐式类型转换,算术转换问题,以及操作符的属性
150 0
|
Java
1 变量,类型,运算符,表达式
1 变量,类型,运算符,表达式
83 0