首页 > 其他分享 >位运算详解

位运算详解

时间:2023-02-11 23:23:15浏览次数:41  
标签:b% 运算 int long 详解 ull ans 3F

0*01 位运算

补码

  • 在补码下每个数值都有唯一的表示方式
  • 发生算数溢出时,32位无符号整数相当于自动对2^32取模
  • 0*3F 3F 3F 3F 满足一下两个条件
    • 整数的两倍不超过int能表示的最大整数
    • 整数的每个字节都是相同的

移位运算

左移

​ 在二进制下把数字同时向左移动,低位以0填充,高位越界后舍弃

\[1<<n=2^n, n<<1=2n \]

右移

​ 在二进制下把数字同时向右移动,高位以符号位填充,低位越界后舍弃

\[n>>1=Floor(n/2.0) \]

例题

  1. 求ab%p的值,1<=a,b,p<=109

    枚举二进制下每位,没了……

    #include<bits/stdc++.h>//a^b%p
    
    using namespace std;
    int a,b,p;
    int power(){    
        int ans=1%p;
        for(;b;b>>=1){  //取遍所有数位
            if(b&1) ans=(long long)ans*a%p; //取当前最后一位
            a=(long long)a*a%p;
        }
        return ans;
    }
    int main(){
        scanf("%d%d%d",&a,&b,&p);
        printf("%d",power());
        return 0;
    }
    
  2. 求a*b%p的值,1<=a,b,p<=10^18

    更神奇的算法……时间复杂度O(n)

    #include<bits/stdc++.h> //时间复杂度O(n)的神奇算法  a*b%p
    using namespace std;
    typedef unsigned long long ull;
    ull a,b,p;
    ull mul(){
        a%=p,b%=p;
        ull c=(long double)a*b/p;
        ull x=a*b,y=c*p;
        long long ans=(long long)(x%p)-(long long )(y%p );
        if(ans<0)   ans+=p;
        return ans;
    }
    int main(){
        scanf("%lld %lld %lld",&a,&b,&p);
        printf("%lld",mul());
        return 0;
    }
    

标签:b%,运算,int,long,详解,ull,ans,3F
From: https://www.cnblogs.com/Nebulary/p/17112793.html

相关文章

  • CC1链详解
    前言:这篇文章是对CC1的总结,个人学习,如有不对请多指教。谢谢!环境:jdk8u71以下,因为在该jdk版本以上这个漏洞已经被修复了下载链接:https://www.oracle.com/cn/java/technolog......
  • python and or 运算
    1. and x= yandz前后两个值用and,如果两个都为真,返回第二个值;如果两只都为假,则返回顺序上第一个出现为假值的值;如果一个为真,一个为假,则返回顺序上第一个出......
  • 768~769 MVC_jsp演变历史,MVC详解
    MVC:开发模式jsp演变历史1.早期只有servlet,只能使用response输出标签数据,非常麻烦2.后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大......
  • Java基础知识点(三元运算符)
    ​三元运算符:​1.需求:定义一个变量记录两个整数的较大值。2.作用:可以进行判断,根据判断的结果得到不同的内容。​3.格式:关系表达式?关系表达式1:关系表达式2;      ......
  • Android-Service详解
    前言Service是长期运行在后台的应用程序组件。Service 是和应用程序在同一个进程中,所以应用程序关掉了,Service也会关掉。可以理解为Service是不能直接处理耗时操作的......
  • "万字" Java I/O 详解
    JavaI/O流讲解每博一文案谁让你读了这么多书,又知道了双水村以外还有一个大世界,如果从小你就在这个天地里,日出而作,日落而息。那你现在就会和众乡亲抱同一理想:经过几年......
  • 逻辑运算符 java 230211
    符号例子//写一个种序判断这个工作要不要去//要求1:要求资金大于4000并且距离小于10公里//逻辑与:左右两边同时满足,才成立booleanb=money>=4000&&distance<10;S......
  • 三元运算符 java 230211
    格式例子//三元运算符//小明的体温用变量temp保存,我们要判断他是否发烧doubletemp=36.6;//返回值=条件表达式?条件成立时的返回内容:条件不成立时的返回内容Stringre......
  • 运算符的优先级 java 230211
    优先级......
  • EL_运算符与EL_获取域中存储的值
    EL_运算符1.使用:1.运算运算符:1.算数运算符:+-*/(div)%(mod)2.比较......