首页 > 其他分享 >移位运算绝佳的应用

移位运算绝佳的应用

时间:2024-06-10 18:32:06浏览次数:24  
标签:cnt cout 绝佳 int void unsigned ++ 移位 运算

先想一下,如果要给你一个数对应的补码形式,你要计算这个数的1的数目,你有几种做法呢(针对负数的补码也是否能够计算呢):

3种思路分享给你:

整完看看后面的思考题,c一下

first.

void One(unsigned int n){  //unsigned的运用
    int cnt=0;
    while(n>0){
        if((n%2==1))
           cnt++;
        n /= 2;
    }
    cout << cnt << endl;
}

unsigned保证负数也可求解。

second.

void One(int n){
    int cnt = 0;
    for(int i = 0; i < 32;i++)
        if (((n>>i) & 1 == 1))
            cnt++;
    cout << cnt << endl;
}

通过遍历整数n的每一位,并检查每一位是否为1,来计算并输出整数n的二进制表示中1的个数。

方法是高效的,只需要进行32次操作(对于int),而不需要进行多次除法或模运算。

牛的总在最后出现:

third.

void One(int n){
    int cnt = 0;
    while(n){
        n = n & (n - 1);
        cnt++;
    }
    cout << cnt << endl;
}

通过不断将nn - 1进行按位与操作,每次操作都会消除n最右边的1,直到n变为0。每次消除一个1,cnt就增加1。这种方法同样高效,因为它只需要进行与1的个数相等的次数操作,就能计算出整数n的二进制表示中1的个数。

代码简短,而韵味悠长!

看看实际应用:

如何判断一个数是不是2的倍数?

//例题:判断是否是2的次方数
#include<iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    if(n&(n-1)==0)
        cout << "yes" << endl;
    else
        cout << "no" << endl;
    return 0;
}

把一个数补码的第五位置置1,然后在此基础上返回来再输出

//例题:把一个数的第五位置为1,然后再返回来,同时进行两次输出
#include<iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    n = n | (1 << 4);
    cout << n << endl;
    n &= ~(1 << 4);
    cout << n << endl;
    return 0;
}   //鹏哥的失误,恰13有效

鹏哥在视频课中有一点失误,恰恰举的例子不影响结果,我把算法改过来了

标签:cnt,cout,绝佳,int,void,unsigned,++,移位,运算
From: https://blog.csdn.net/FENGCHEN____/article/details/139451591

相关文章

  • Java 程序结构 -- Java 语言的变量、方法、运算符与注释
    大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第003篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的......
  • 计算机组成原理 第六章 计算机的运算方法 Part4 浮点数的四则运算、IEEE754标准与ALU
    1.浮点数介绍基本格式首先需要明确的是浮点数的组成,浮点数由阶码和尾数两部分组成其中阶码又分为阶符和数值部分,阶码J和阶码的位数m共同反应浮点数的表示范围以及小数点的实际位置;尾数由数符和数值部分组成,数符代表浮点数的符号,尾数的数值部分反映浮点数的精度例:阶码E反......
  • 【C++修行之道】类和对象(四)运算符重载
    目录一、运算符重载函数重载和运算符重载有什么关系?二、.*运算符的作用三、运算符重载的正常使用四、重载成成员函数五、赋值运算符重载1.赋值运算符重载格式传值返回和引用返回有没有办法不生成拷贝?2.赋值运算符只能重载成类的成员函数不能重载成全局函数3.用户......
  • 位运算详细介绍
    1.定义: 位运算是一种针对二进制数的操作,它直接操作二进制数的各个位,以达到高效的运算目的。位运算常用于计算机底层的操作,如编码解码、图像处理和密码学等领域。下面详细介绍几种常见的位运算及其应用。位与(&):对两个操作数的每个对应位执行逻辑与操作,如果两个对应位都为1,......
  • Java中运算符的详细介绍
    在Java编程中,运算符是执行各种操作的符号。Java提供了丰富的运算符来处理不同类型的操作。本文将详细介绍Java中的各种运算符,包括算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符和类型运算符,并通过代码示例帮助理解这些运算符的使用方法。一、算术......
  • python-数据分析-Numpy-3、数组的运算
    数组的运算使用NumPy最为方便的是当需要对数组元素进行运算时,不用编写循环代码遍历每个元素,所有的运算都会自动的矢量化。简单的说就是,NumPy中的数学运算和数学函数会自动作用于数组中的每个成员。#-*-coding:utf-8-*-#数组的运算#使用NumPy最为方便的是当需要对数组......
  • C++20 新特性: 三向比较运算符
    目录标题功能和用法示例代码如何重载三向比较运算符示例:重载三向比较运算符注意事项结语C++20引入了一种新的比较运算符,称为“三向比较运算符”或“太空船运算符”,其符号为<=>。这个运算符提供了一种简化方式来同时比较两个值的相等性、小于和大于状态。这一特......
  • 超详解——python数字和运算——小白篇
    目录1.位运算2.常用内置函数/模块math模块:random模块:decimal模块:3.内置函数:总结:1.位运算位运算是对整数在内存中的二进制表示进行操作。Python支持以下常见的位运算符:按位与(&):两个二进制数对应位都为1时,结果的该位才为1。按位或(|):两个二进制数对应位有一个为1,结果......
  • 头歌易-算式运算的合法性
    给定一个算式运算,算式由运算数、+、-、*、/、(、)组成,请编写程序判断该算式运算是否合法。如果合法,计算该算式的值。输入描述:第一行输入一个运算表达式输出描述:如果表达式合法则计算其值,结果保留两位小数,如果不合法则输出表达式不合法!输入样例:(5+3)*9输出样例:72.00sd......
  • Python 运算符重载
    在Python中,运算符重载是一种允许你定义或修改内置运算符(例如+,-,*,/等)在自定义类中的行为的技术。通过重载运算符,你可以使这些运算符对自定义对象执行特定的操作。运算符重载是通过在类中定义特殊方法(也称为魔法方法)来实现的,这些方法通常以双下划线开头和结尾。以下是一些常......