bit

Distinguishing between 32-bit and 64-bit A64 instructions

♀尐吖头ヾ 提交于 2020-01-13 18:53:45
Distinguishing between 32-bit and 64-bit A64 instructions Most integer instructions in the A64 instruction set have two forms, which operate on either 32-bit or 64-bit values within the 64-bit general-purpose register file. When looking at the register name that the instruction uses: • If the register name starts with X, it is a 64-bit register. • If the register name starts with W, it is a 32-bit register. When a 32-bit register form is selected: • Right shifts and rotates inject at bit 31, instead of bit 63. • The condition flags, where set by the instruction, are computed from the lower 32

Geohash 算法学习

你离开我真会死。 提交于 2020-01-13 03:28:10
Geohash 算法: 这是一套纬度/经度地理编码算法,把纬度/经度编码成base32位的字符串。这种编码和纬度/经度不是唯一对应,其实是一个纬度/经度区间。算法有一个精度概念,精度越高,字符串越长,所表示的区间越小。可以编码后的字符串想象成一个格子,里面存放一些纬度/经度值。格子趋近很小的时候,只能存放一纬度/经度值,那么编码和纬度/经度就是唯一对应的关系。但是这个不是重点,这套算法目的就是把纬度/经度编码成近似值,通过近似值搜索,就能很高效的缩小范围,然后再从小范围里查找精确值。 例如,坐标57.64911,10.40744(日德兰半岛的顶端附近,在丹麦)产生一个u4pruydqqvj字符串。参考Wikipedia: http://en.wikipedia.org/wiki/Geohash 算法原理: 以A[-170,42.6] 为例,纬度范围(-90, 90)平分成两个区间(-90, 0)、(0, 90),位于前一个区间,则编码为0,否则编码为1。由于42.6属于(0, 90),所以取编码为1。 再将(0, 90)分成 (0, 45), (45, 90)两个区间,而42.6位于(0, 45),所以编码为0, 再将(0, 45)分成 (0, 22.5), (22.5, 45)两个区间,而42.6位于(22.5, 45),所以编码为1, 再将(22.5, 45)分成 (22.5,

C51实时时钟SD24XX读写演示程序

感情迁移 提交于 2020-01-12 06:44:42
//************************************************************ // 实时时钟SD24XX读写C51演示程序 // MCU: STC15W1K16S @11.0592MHz // E-mail: FAE@whwave.com.cn // TEL: 0755-83114387 // Last update: 2016/11/8 //************************************************************ #include <reg51.h> #include <intrins.h> /******************** RTC Device address ********************/ #define RTC_Address 0x64 /******************** EEPROM/NVSRAM存储器地址宏定义 ********************/ #define EE_FirstPage_Address 0xA0//第一页(尾缀B、C、D、E、F型) #define EE_SecondPage_Address 0xA2//第二页(尾缀B、C型) #define EE_ThirdPage_Address 0xA4//第三页(尾缀C型)

位数组(bit数组)

久未见 提交于 2020-01-12 00:06:38
使用到位数组的代码,一般出于两个考虑: 1. 降低存储空间。2. 加快查找效率(能迅速判断某个地元素是否在一个集合中)。 知识准备 1. 计算机中的位操作: 与(&)、或(|) 、非(~)   1 & 1 = 1        1 | 1 = 1        ~1 = 0   1 & 0 = 0        1 | 0 = 1        ~0 = 1                     0 & 1 = 0        0 | 1 = 1   0 & 0 = 0        0 | 0 = 0 2. 左移(<<)和右移(>>)   左移一位相当于乘以2。左移操作后,右边空缺位自动补0。右移(本文仅考虑逻辑右移)与左移相反方向操作,相当于除以2,左边空缺自动补0。 3. 置1、置0,判断置位。 eg: x = 221,其二进制为11011101,若要将它的第5位由0变为1(置1),则只须第5位与1或即可 11011101 00100000 |-------- 11111101若要将它的第4位由1变为0(置0),则只须第4位与0与即可 11011101 11101111 &-------- 11001101判断第5位是否置1 11111101 00100000 &-------- 00100000 (相与的结果非0则表明相应位已置1,否则置0) 4. 非(~)运算  

基于FPGA的SPI接口讲解——flash M25P28为例(2)

旧巷老猫 提交于 2020-01-11 15:45:08
flash M25P128页写入 M25P128 PP操作的注意点 时序图设计 flash_write模块的书写 flash_write测试模块的代码 其他模块的代码 实验结果 结束语 M25P128 PP操作的注意点 我们本次实验的内容是,对flash写一个字节的数据: 所用到的软硬件环境为: 硬件:锆石A4plus开发板 软件:quartus II 13.1 从技术手册中我们可以得到如下信息: 从上面的信息中我们提取如下信息: 1、PP操作之前必须有写使能操作被执行; 2、PP操作连续写只能对一页写,超过256个数据只保存最后256个数据到页中; 3、整个操作服从的协议是SPI协议 时序图设计 由手册中的时序图我们可以知道,该时序与flash的扇区擦除指令的时序几乎一摸一样,只是在擦除的指令上多了8个sck,所以设计的时序图如下: 相信同学们学会了扇区擦除指令,PP操作的指令可以很容易理解。 flash_write模块的书写 这里的传统不说废话,直接上代码: `timescale 1 ns / 1 ps // ********************************************************************************* // Project Name : OSXXXX // Author : zhangningning //

Codeforces Round #613 (Div. 2) D - Dr. Evil Underscores(思维,位运算)

╄→гoц情女王★ 提交于 2020-01-11 14:54:23
🥑 🥑 🥑 题意:对于一个数组,求一个数字与数组每个元素异或之后的最大值最小,求这个最大值 又是位运算,,题目给出数组元素范围在2^30以内,二进制最多30位,从最高位开始贪心,如果此位置的数组元素有的是1有的是0,最后肯定取1,否则取0,还有就是分组讨论,因为每个bit位只能满足原数组中一部分元素异或后为1 #define int ll vector<int>a; int solve(vector<int>v,int bit) { if(bit<=0||v.size()==0) return 0; vector<int>zero,one; rep(i,v.size()) { if((v[i]>>bit)&1) zero.push_back(v[i]); else one.push_back(v[i]); } if(zero.size()==0) return solve(one,bit-1); if(one.size()==0) return solve(zero,bit-1); return (min(solve(one,bit-1),solve(zero,bit-1))|1<<bit); } signed main() { int n;cin>>n; a.resize(n);cin>>a; cout<<solve(a,30)<<endl; return 0; } 来源:

Convert bit array to uint or similar packed value

喜欢而已 提交于 2020-01-11 09:23:06
问题 I have a large array of booleans, and I want to pack/unpack them into a uint or similar value. How can I do this in C#? 回答1: You can use the BitArray class to convert the bool array into an int array: int[] theIntArray = new int[(theBoolArray.Length + 31) / 32]; new BitArray(theBoolArray).CopyTo(theIntArray, 0); 回答2: You need to establish a series of bit masks (BIT0 to BIT31 e.g 2^0 and 2^32) then operate on them using bitwise operators: // Initialise byte value = 240; // 11110000 // Clear

Bitmap 位图 Java实现

£可爱£侵袭症+ 提交于 2020-01-11 09:15:32
一、结构思想 以 bit 作为存储单位进行 0、1存取的数据结构。 可用作布尔值存取,比如给定第i位,该bit为1则表示true,为0则表示false。 二、使用场景及优点 适用于对布尔或0、1值进行(大量)存取的场景。 如:记录一个用户365天的签到记录,签了为true,没签为false。若是以普通key/value数据结构,每个用户都需要记录365条,当用户量很大时会造成巨大的空间开销。 因此运用位图的话,每天签到记录只占1个位(bit),一共就365位,则只需48个字节就能容纳一个用户一年的签到记录。 优点 : 低空间开销且高效的0、1存取方案 三、具体实现 实现源码: https://github.com/SimpleIto/data_structure/blob/master/src/bitmap/Bitmap.java 主要考虑以下问题: 用什么物理结构存储一系列bit? 如何通过位操作高效的实现对指定bit的获取、修改操作?(而不是通过字符串转去转来臃肿的实现) 解决思路: Java中,使用 byte[] 字节数组来存储bit。 1 byte = 8 bit 对于获取操作 思路:拿到目标bit所在的byte后,将其向右位移(并将高位置0),使目标bit在第一位,这样结果值就是目标bit值。 1) 通过 byte[index >> 3] (等价于byte[index/8

ABC #150 E. Change a Little Bit

筅森魡賤 提交于 2020-01-11 03:55:33
题目 。 经过一番分析,问题归为求 $\sum_{i=0}^{n} \binom{n}{i} (i+1)$。 考虑多项式 $p(x) := \sum_{i=0}^{n} \binom{n}{i} (i+1)x^{i}$,所求即 $p(1)$。 注意到 $p(x) = \sum_{i=0}^{n} \binom{n}{i} (x^{i + 1})' = (\sum_{i=0}^{n} \binom{n}{i} x^{i + 1})'$。 而 $\sum_{i=0}^{n} \binom{n}{i} x^{i + 1} = x \sum_{i=0}^{n} \binom{n}{i} x^{i} = x(x+1)^{n}$。 故 $p(x) = (x(x+1)^{n})' = (x+1)^{n} + nx(x+1)^{n-1}$,于是 $p(1) = 2^{n} + n2^{n - 1}$。 又 $\sum_{i=0}^{n} \binom{n}{i} (i+1) = 2^{n} + \sum_{i=0}^{n} \binom{n}{i} i$,于是有 $\sum_{i=0}^{n} \binom{n}{i} i = n2^{n-1}$。 来源: https://www.cnblogs.com/Patt/p/12178828.html

让人眼前一亮的算法------布隆过滤器

≯℡__Kan透↙ 提交于 2020-01-11 02:07:58
问题 假设你现在要处理这样一个问题,你有一个网站并且拥有很多访客,每当有用户访问时,你想知道这个ip是不是第一次访问你的网站。这是一个很常见的场景,为了完成这个功能,你很容易就会想到下面这个解决方案: 把访客的ip存进一个hash表中,每当有新的访客到来时,先检查哈希表中是否有改访客的ip,如果有则说明该访客在黑名单中。你还知道,hash表的存取时间复杂度都是O(1),效率很高,因此你对你的方案很是满意。 然后我们假设你的网站已经被1亿个用户访问过,每个ip的长度是15,那么你一共需要15 * 100000000 = 1500000000Bytes = 1.4G,这还没考虑hash冲突的问题(hash表中的槽位越多,越浪费空间,槽位越少,效率越低)。 于是聪明的你稍一思考,又想到可以把ip转换成无符号的int型值来存储,这样一个ip只需要占用4个字节就行了,这时1亿个ip占用的空间是4 * 100000000 = 400000000Bytes = 380M,空间消耗降低了很多。 那还有没有在不影响存取效率的前提下更加节省空间的办法呢? BitSet 32位无符号int型能表示的最大值是4294967295,所有的ip都在这个范围内,我们可以用一个bit位来表示某个ip是否出现过,如果出现过,就把代表该ip的bit位置为1