二进制数

1073. 负二进制数相加

梦想与她 提交于 2019-12-01 12:10:51
题面: 给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果。 数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列。例如,arr = [1,1,0,1] 表示数字 (-2)^3 + (-2)^2 + (-2)^0 = -3。数组形式 的数字也同样不含前导零:以 arr 为例,这意味着要么 arr == [0],要么 arr[0] == 1。 返回相同表示形式的 arr1 和 arr2 相加的结果。两数的表示形式为:不含前导零、由若干 0 和 1 组成的数组。 示例: 输入:arr1 = [1,1,1,1,1], arr2 = [1,0,1] 输出:[1,0,0,0,0] 解释:arr1 表示 11,arr2 表示 5,输出表示 16 。 提示: 1 <= arr1.length <= 1000 1 <= arr2.length <= 1000 arr1 和 arr2 都不含前导零 arr1[i] 为 0 或 1 arr2[i] 为 0 或 1 题解: 模拟(0(n)) 与基数为2的二进制不一样的是,进位是高位减一; 因此此时应该检查数位上是否出现了-1,如果出现了,高位加1将当前位变为1 最后除去前导0 代码: class Solution { public: vector<int> addNegabinary(vector

LeetCode. 位1的个数

三世轮回 提交于 2019-12-01 10:28:59
题目要求: 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 示例: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。 代码: class Solution { public: int hammingWeight(uint32_t n) { int count = 0; for(int i = 0; i < 32; i++) { if(n & 1 == 1) { count += 1; } n = n >> 1; } return count; } }; 分析: 采用位运算,以及数的移位来做。 来源: https://www.cnblogs.com/leyang2019/p/11681785.html

QR 码详解(上)

那年仲夏 提交于 2019-12-01 05:04:31
关于二维码,我查了下资料,现在基本都在用日本的 QR 码,PDF417以及汉信码日常基本看不到。原因在于各方面来说,的确是 QR 码最为优秀。所以我准备写一篇介绍 QR 码的文章,如果是写书,可能不方便写得这么详尽,但如果是网上的文章,就可以自由发挥了。写完这篇文章,再抽取部分内容正规化,并整合其它内容形成书的第四章。为方便未来上课讲解方便,以及快速画图,我还做了一个《QR助手程序》,帮助绘制 QR 码中的各部分图形,最后演化成一个二维码绘制程序。本来并未打算要自己写二维码绘制程序的,网上有很多现成的开发包。但一方面为了让自己更熟悉二维码,另一方面,用实现一个简单的二维码绘制程序让学生参考,可以有效降低学生的学习门槛。 QR 码是日本发明的一种二维码,也是目前应用最为广泛的编码。在中国,这种编码几乎无处不在,微信支付、支付宝支付、共享单车、各种广告扫描关注等等。 1. QR 码的特点 1. 存储容量大 传统的条形码只能处理 20 位左右的信息,与此相比,QR 码则可处理几十倍上百倍的信息。另外,QR 码还可以支持所有类型的数据(如:数字、英文字母、日文字母、汉字、二进制、控制码等)。一个 QR 码最多可处理 7089 个数字的巨大信息量。 2. 占用空间小 QR 码使用纵向和横向两个方向处理数据,相同的信息量,QR 码所占空间更小。下图分别是 GS1 编码 `(02

基础项目(4)二级制转换BCD

我只是一个虾纸丫 提交于 2019-11-29 13:17:48
写在 前面的 话 我们的数据在运算或者存储的时候,一般都是以二进制的格式存在的。但是在很多情况下,我们需要将运算结果显示到某种显示设备上,如果直接以二进制的形式来显示的话,会非常不便于我们查看。因此,我们需要首先将二进制数转换为十进制数再进行显示。二进制到十进制的转换有很多种方法。本节,梦翼师兄和大家一起学习一种国外目前最为流行的转换方法 -逐步移位法。通过这种方式,我们不但可以在没有周期差的情况下实现数据格式的转换,同时我们的资源占用量也是相当小的。 基本 概念 BCD码(Binary-Coded Decimal‎)也 称二进码十进数或二 - 十进制 代码。用 4位二进制数来表示1位 十进制数 中的 0~9这10个数码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧 在 FPGA中经常用到,如矩阵键盘输入的数据需要在数码管上显示的时候,矩阵键盘输入的数字是二进制数,而数码管上需要显示的是十进制数,所以需要将二进制数转换成BCD码,这在我们以后的设计中会经常遇到。 7.3 .3逐步移位法原理 在本设计中,我们使用逐步移位法来实现二进制数向BCD码的转换,在设计之前,我们先来了解一下二进制数向BCD码转换的原理-逐步移位法: 变量定义: B:需要转换的二进制数位宽 D:转换后的BCD码位宽 (其中

获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。Java实现

♀尐吖头ヾ 提交于 2019-11-29 11:59:37
如果我们会判断一个数的二进制位有多少个1,那么这道题就很简单,只需要判断完后,把结果按照题目要求打印出来就行了。 具体代码实现如下: public class BinaryNumber { public static void main ( String [ ] args ) { //首位为奇数位 int num = 14 ; int check = 0 ; odd ( num ) ; System . out . println ( ) ; even ( num ) ; } public static void odd ( int num ) { for ( int i = 30 ; i >= 0 ; i = i - 2 ) { if ( ( num & ( 1 << i ) ) != 0 ) { System . out . print ( "1 " ) ; } else { System . out . print ( "0 " ) ; } } } public static void even ( int num ) { for ( int i = 31 ; i >= 0 ; i = i - 2 ) { if ( ( num & ( 1 << i ) ) != 0 ) { System . out . print ( "1 " ) ; } else { System .

Python编程笔记二进制、字符编码、数据类型

百般思念 提交于 2019-11-29 10:19:47
一、二进制 bin() 在python中可以用bin()内置函数获取一个十进制的数的二进制 计算机容量单位 8bit = 1 bytes 字节,最小的存储单位,1bytes缩写为1B 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1024 GB 1PB = 1024 TB 1EB = 1024 PB 1ZB = 1024 EB 1YB = 1024 ZB 1BB = 1024 YB 二、字符编码 Unicode编码:国际标准字符集,它将世界的各种语言的每个字符定义个唯一的编码,以满足跨平台、跨语言的文本信息转换。Unicode(统一码、万国码)规定所有的字符和符号最少由16位来表示(2个字节),即2**16 = 65536. UTF-8 ,是对Unicode编码的压缩优化,它不在使用最少2个字节,而是将所有的字符和符号分类,ascii码中的内容用1个字节来保存,欧洲的字符用2个字节来保存,东亚的字符用3个字节保存。 windows 系统中文版默认编码是GBK MAC \Linux 系统默认编码是UTF-8 三、浮点数 浮点数 是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。包括整数和分数,包含有限小数和无线循环小数。 无限不循环的小数不是浮点数 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的

338.比特位计数

天涯浪子 提交于 2019-11-28 11:54:33
给定一个非负整数 num 。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 进阶: 给出时间复杂度为 O(n*sizeof(integer)) 的解答非常容易。但你可以在线性时间 O(n) 内用一趟扫描做到吗? 要求算法的空间复杂度为 O(n) 。 你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ 中的 __builtin_popcount )来执行此操作。 class Solution { public: vector<int> countBits(int num) { if (num == 0) return {0}; vector<int> res{0, 1}; int k = 2, i = 2; while (i <= num) { for (i = pow(2, k - 1); i < pow(2, k); ++i) { if (i > num) break; int t = (pow(2, k) - pow(2, k - 1)) / 2; if (i < pow(2, k - 1) + t) res.push_back(res[i - t]); else res.push

Leetcode 338. 比特位计数(Python3)

故事扮演 提交于 2019-11-28 11:51:50
338. 比特位计数 给定一个非负整数 num 。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 进阶: 给出时间复杂度为 O(n*sizeof(integer)) 的解答非常容易。但你可以在线性时间 O(n) 内用一趟扫描做到吗? 要求算法的空间复杂度为 O(n) 。 你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ 中的 __builtin_popcount )来执行此操作。 代码: class Solution: def countBits(self, num): """ :type num: int :rtype: List[int] """ res = [] for i in range(num): count = 0 while i: i = i & (i - 1) count += 1 res.append(count) return res 总结: 利用位运算 i = i & (i - 1) 来清除i的二进制中最后位的1 优化时间复杂度: class Solution: def countBits(self, num): """ :type num: int

java8时间类的一些封装

时间秒杀一切 提交于 2019-11-27 23:54:25
1、判断平年和闰年 (prolepticYear & 3) == 0 这个条件使用了位运算,与上3在二进制计算下即为:& 00…011。目的是保留最后2位二进制数,然后判断是否最后两位二进制数等于0。其目的是判断prolepticYear是否是4的倍数(第3位开始的二进制数代表的十进制数为4、4 * 2、4 * 2 * 2·······),闰年一定要满足是4的倍数的条件; (prolepticYear % 100) != 0 || (prolepticYear % 400) == 0 这个条件即为判断是否是整百数或是否是400的倍数。 @Override public boolean isLeapYear(long prolepticYear) { return ((prolepticYear & 3) == 0) && ((prolepticYear % 100) != 0 || (prolepticYear % 400) == 0); } 2、获取每个月的天数 public int length(boolean leapYear) { switch (this) { case FEBRUARY: return (leapYear ? 29 : 28); case APRIL: case JUNE: case SEPTEMBER: case NOVEMBER: return 30

Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?

时间秒杀一切 提交于 2019-11-27 02:10:25
前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的。最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark、Apache Drill、Apache Flink。基于 JVM 的数据分析引擎面临的一个常见挑战就是如何在内存中存储大量的数据(包括缓存和高效处理)。合理的管理好 JVM 内存可以将 难以配置且不可预测的系统 与 少量配置且稳定运行的系统区分开来。 在这篇文章中,我们将讨论 Apache Flink 如何管理内存,讨论其自定义序列化与反序列化机制,以及它是如何操作二进制数据的。 数据对象直接放在堆内存中 在 JVM 中处理大量数据最直接的方式就是将这些数据做为对象存储在堆内存中,然后直接在内存中操作这些数据,如果想进行排序则就是对对象列表进行排序。然而这种方法有一些明显的缺点,首先,在频繁的创建和销毁大量对象的时候,监视和控制堆内存的使用并不是一件很简单的事情。如果对象分配过多的话,那么会导致内存过度使用,从而触发 OutOfMemoryError,导致 JVM 进程直接被杀死。另一个方面就是因为这些对象大都是生存在新生代,当 JVM 进行垃圾回收时,垃圾收集的开销很容易达到 50% 甚至更多。最后就是 Java 对象具有一定的空间开销(具体取决于 JVM 和平台)。对于具有许多小对象的数据集