熟悉编程的人都知道二进制总是一个让人晦涩难懂的词汇,只有大神级的程序员才有资格把玩它。
我们今天来重新认识一下二进制,了解编程中的数学知识和计算机为什么使用二进制?
more
先聊聊十进制
我们平时使用的是10进制计数法。
继续阅读 »
在学习数论时我们都知道:只用2的幂次可以组合出所有的正整数。这便是二进制的魅力——状态简单而又变化万千。
引子
实际算法中,常常有一些线性的但数据量特别大的问题,如区间求和、求最小值等。很多时候,为了把时间复杂度从$O(n^2)$甚至更高的地方降下来,我们需要对数据进行一些预处理,以提高计算的速度。在这其中,有很大一部分是来自二进制运算特点的启发。
目录
树状数组
RMQ
LCA&树上倍增
继续阅读 »
问题描述:已知数组a以及若干个查询(x, y),求a[x~y]之间的最小值。
分析
不难发现:若取t使得$2^t\leq y-x+1$且$2^{t+1}>y-x+1$,则有:
$$[x, x+t]\bigcup[y-t+1,y]=[x,y]$$
运用二进制的思想,我们只需预处理出$i~i+2^k-1$之间的最小值,即可快速完成查询。设dp[i][j]为$i~i+2^j-1$之间的最小值,则有:
$$dp[i][j]=min(dp[i][j-1],dp[i+2^{j-1}][j-1])$$。
Code
var
a: array [1..100000] of longint;
dp: array [1..1000
继续阅读 »
note of https://www.ichunqiu.com/course/56927
Hacking三步曲
理解系统(Understanding)
系统性的基础课程学习,深入理解计算机系统运作机制。
破坏系统(Breaking)
学习与创造漏洞挖掘与利用技巧
重构系统(Reconstruction)
设计与构建系统防护
基础课程学习
核心基础课程——计算机的工作原理
体系结构
CPU的设计与实现
机器指令与汇编语言
指令的解码、执行
内存管理
CMU 18-447 Introduction to Computer Architecture
https://www.ece.cmu.edu/~ece447/s15/dok
继续阅读 »
我们把自己的程序发布到App Store,但是不能保证每一个用户都是从App Store下载官方APP,也不能保证每一个用户都不越狱。
换句话说,我们无法保证程序运行环境在苹果管控策略下就绝对的安全。
所以,在有些情况下,尤其是和钱有关系的APP,我们有必要在和服务器通信时,让服务器知道客户端到底是不是官方正版的APP。
继续阅读 »
本文主要通过介绍如何计算十进制数转换成二进制数后,其二进制数中是1的个数,进而分析算法复杂度相关问题。例如十进制数7,二进制表示为0111,总共有三个1。
代码使用go语言实现,为简单起见,算法4和算法5只能计算0-255范围之内的数。
继续阅读 »
从今天起至10月11日,持续连载。
关于计算机
ENIAC
出现于1946年。
是最早的计算机。
是电子管计算机。
其他
阶码,即浮点数的指数部分。
IPv6是128位的。
求补码:二进制下:各位取反再加1 或 把原码减1再取反。
关于算法
各种排序的时间复杂度
快速排序:$O(nlogn)$,最坏为$O(n^2)$。
冒泡排序:$O(n^2)$。
归并排序:$O(nlogn)$。
计数排序:$O(n)$。
插入排序:$O(n^2)$。
关于树
完全二叉树 vs 满二叉树:完全二叉树最后一层不一定满。
前序遍历:中左右;中序遍历:左中右;后序遍历:左右中。
节点数
继续阅读 »
android界面一般采用Xml编写,与图片资源结合
如果想"借鉴"别人的安卓界面,可以下载别人的apk
解压,然后图片资源可以找出来
xml文件也可以看到,不过都是二进制,需要反编译
可以使用如下办法进行反编译
下载AXMLPrinter2.jar
下载BatchAXPrinter.BIN.zip 下载之后解压,更改后缀为.jar
在控制台进入到解压后apk的目录,输入java -jar BatchAXPrinter.jar AXMLPrinter2.jar ../res/layout/
其中 ../res/layout/是你要反编译的XML文件的根目录。即可完成批量反编译xml文件
再加上之前得到的图片资源,安卓界面"借鉴
继续阅读 »
1.Java与C++的异同
Java解释性语言:源代码-编译器(字节码)-JVM执行
C/C++编译型语言:编译链接成二进制代码
Java不存在全局变量,全局函数,没有指针,不支持多重继承,不支持运算符重载,没有预处理器,不提供goto语句(但保留关键字),不支持自动强制类型转换,必须显式强制类型转换。
Java为纯面向对象语言,所有代码包括函数,变量等都属于类
继续阅读 »
我们都知道,任何信息在计算机中都是以二进制01的形式存在,通过不同的01组合,可以表达出不同的信息,这就是编码了。我们通常所说的字节(byte),就是一个最基本的单元,它由8个0或者1来表示,可以组合出256种状态,如果每一种状态代表一个符号,那么一个字节可以编码出256个不同的符号,从00000000到11111111。
继续阅读 »