0X01 位运算笔记】的更多相关文章

本文为转载其他地方的文章; MATLAB函数 1.matlab函数bitset 设置数的某一位二进制位为1. <Simulink与信号处理> 使用方法 C = bitset(A,bit) 将数A的第bit二进制位设为1. C = bitset(A,bit,V) <Simulink与信号处理> 将数A的第bit二进制位设为V,V必须为0或1.   应用举例 例1: . C = bitset(uint8(9),5) C = 25 将数字9(01001)的第5位设为1,C的二进制位110…
位运算: ~(非)-->二进制数进行0和1的互换 样例: public class Test { public static void main(String[] args) { System.out.println(~-2);//输出1 System.out.println(~-1);//输出0 System.out.println(~0);//输出-1 System.out.println(~1);//输出-2 System.out.println(~2);//输出-3 System.out…
二进制是计算机的根本! 你了解她它吗? int lowbit(int x) { return x&(-x);//x&(~x+1),~x=-1-x; } int __builtin_ctz(unsigned int x) int __builtin_ctzll(unsigned long long x) 返回x的二进制表示下最低位的1后面有多少个0 int __builtin_popcount(unsigned int x) int __builtin_popcountll(unsigned…
都比较基础吧. 知识点 1.快速幂和快速乘(这里有一个用long double舍弃精度的做法,但是感觉既不稳又没用) 2.懒人写边目录的时候的k^1 3.lowbit,得到的是低到高第一个1的位.求一个数有多少个位为1.可以用于树状数组,以后拓展. 4.2进制状压,例题是poj2288,枚举每一种顺序DP,f[i][j][k]表示当前状态为i,选的倒数第2个为j,选的倒数第1个为k的值,时间复杂度O(2^n*n^3),没什么意思不写了.…
一.快速幂的模板代码 a^b%p: #include<iostream> using namespace std; int main() { int a,b,p; cin>>a>>b>>p; % p; while (b) { ) res = res * 1ll * a % p; b >>= ; a = a * 1ll * a % p; } cout<<res<<endl; } 注意点: 1.转换成long long类型可以…
关于位运算,网上有挺多好的博客介绍过,我就不多解释了 这里只记录一个小例子,是在理解位运算时候写的,帮助自己加深一下印象,做个笔记mark一下 具体场景 摇骰子游戏 1每个骰子有6个点,1-3为小,4-6为大,[1,3,5]为单,[2,4,6]为双 2每次扔3个骰子 问题:如果把每场结果设成实体对象,那么该如何设计呢? 其他的属性就不过多纠结,主要在3个骰子这里 不管是把骰子设成复杂对象,或者是把每个骰子的大小单双分开记下来,都会显得很麻烦 如果使用位运算,就会变得简单许多,代码如下: publ…
一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算   得到的结果是 0011,也就是3  2.位预算有多少种?(我们就将几种我们权限中会用到的) &  与运算    1&0=0    1&1=1   0&0=0 |   或运算    1|1=1     1|0=1    0|0=0 ~  非运算    ~1=0      ~0=1 二.如何与权限关联         1.逻辑是什么?         其实逻辑很…
位运算 源码:用二进制表示一个数,这个码就是源码. 比如2====00000000 00000000 0000000 00000010 正数的反码 源码 补码都一样 负数的源码是符号位取反.第一个位 符号位. 负数的反码=它的源码的符号位不变,其他位按位取反, 二进制的最高位是符号位,正数用0表示,负数用1表示. -1 的源码 1000000  0000000  0000000 0000001 -1的反码 1111111111111111111111111111110 -1的补码 =它的反码加1…
我们都知道,求一个数被另一个数整除的余数,可以用求余运算符”%“,但是,如果不允许使用求余运算符,又该怎么办呢?下面介绍一种方法,是通过位运算来求余,但是注意:该方法只对除数是2的N次方幂时才有效. 在移位运算中我们可知,计算机中的数据都是0和1的序列,当我们把某个数字左移一位,该数字会扩大为原来的2倍:而将其右移一位时,该数字就会缩小为原来的1/2,即相当于对该数字做了一次被2整除的运算. 举例说明: 11的二进制是1011,如果右移一位的话,将变成0101,也就是5. 现在我们考虑11除以8…
进制 二进制   0 1组成,封2进1 八进制 0-7组成,封8进1 十进制 0-9组成,封10进1 十六进制 0-15组成,封16进1 printf以不同进制形式进行输出 变量的内存地址形式 变量在内存中是从高地址到低地址依次保存的,并且只保存二进制 查看内存地址的两种方式:%x和%p 各个类型变量的取值范围 类型修饰符 在64bit编译器环境下, int占用4个字节(32bit),取值范围是-231~231-1: short占用2个字节(16bit),取值范围是-215~215-1: lon…