您的位置:首页 > Web前端

小菜的前端编程散谈(2)

2015-09-11 17:33 162 查看

小菜的前端编程散谈(2)

本次我们来讲讲编程,编程这个概念真是太大了,但没关系,散谈嘛,我就随意一点来讲,涉及到编程里面的一些概念和一些重要的东西,OK开始

0和1

编程为啥要知道0和1呢?那必须的啊,因为计算机最终还是二进制存储嘛,也就是说我们存的数据最终都是由很多0和很多1的随意组合来构成。那么,二进制的东西我们需要懂得多少呢?它和编程有多大的关系?

二进制的存储,十进制是用满十进一,那么二进制当然就是满二进一。所以,十进制中9之后就是10,19之后就是20。而二进制中01之后就是10(对应十进制就是2),11(对于十进制就是3)之后就是100(对应十进制就是4)。OK,如果你学了点编程的东西,那么建议你练练手,实现二进制和十进制之间的转换。当然这种转换是应用层面的,因为最终在计算机眼里,所有的数据全是二进制,没有所谓的十进制。比如一个整数4,在内存地址中表现出来的值就是100(注意这里不是指一百,而是3个连续的内存地址,它们分别存放1、0和0),整数6就是110。初学者可以思考一下这里面的数学知识

二进制的表示,上面说到0和1,这实际上在计算机中叫做位,一个位就是一个Bit,在计算机中,通常用8个Bit来表示一个基础字节单位,就是byte。用数学知识可以得知,8个Bit可以存放0~255(2的8次方减1)之间的数字。1KB等于1024个字节,1MB等于1024,一致递推

数据的存储表示,要熟悉计算机二进制的原码、补码和反码的表示法,这个具体可以自行上网搜索引擎了解,比如补码,对于有符号整型数据,比如32位的整数,第一位表示符号,就是正负。还有针对小数(计算机里叫浮点数),如何表示小数呢?那就是讲某些位用来表示负数位,-1就是2的-1次方就是0.5,-2就是2的-2次方就是0.25,依次类推,可以知道小数其实只是一直模糊渐进,并不是精确的,这就是浮点数IEEE标准表示法,不管任何编程语言都是使用这些标准。还有就是针对字符,我们看到的英文字母、标点符号、汉字这全都是字符,字符是如何表示的呢?比如一个字节8个位,可以存储255个数字,每个数字对应一个符号或者字母或者数字。这个最原始的一个字典表叫做ASCII编码,再往后,针对中文字符或者阿拉伯字符等复杂的字符,就是用更加复杂的字符集来表示了,这些东西知道是怎么回事儿就行了,不必深究

二进制运算,位运算,这些东西,其实还是有必要知道一下,主要包含以下几个运算符,我来依次罗列并阐述一下


按位与, a & b, 全部为1则为1,否则为0

按位或, a | b, 全部为0则为0,否则为1

按位异或, a xor b或者 a ^ b,不同则为1,相同则为0

按位取反, ~a, 1变0,0变1

左移,<<,比如1变成10,10变成100,相当于乘以2

右移,>>,比如100编程10,10变成1,相当于除以2



位运算有用吗?当然有用,而且如果熟练运用,编程会变得非常有趣。最经典的一个问题就是老鼠试毒药的问题了


有1000个一模一样的装有水的瓶子,其中有一个瓶子里的水是有毒的。现在有10只老鼠,要求每个老鼠只能喝一次水,喝到含有毒的水老鼠就会马上死亡。如何在尽可能短的时间内,通过老鼠喝水找到那瓶有毒的瓶子呢


初学者如果没有二进制位的一些知识,恐怕很难懂得这个题的解题思路。不过不用纠结,最开始我也是百思不得其解。这里我讲解一下思路:


1000个瓶子小于2的10次方,就是说[][][][][][][][][][],使用10个位的二进制位可以存储足够多的1~1000以内的编号,比如1就是0000000001,比如3就是0000000011,依次类推。

我还是用一个简单的例子,8个瓶子,4只老鼠。将8个瓶子按1到8编号,将3只老鼠按位编号,所以从1到8用位表示为 0001(1) 0010(2) 0011(3) 0100(4) 0101(5) 0110(6) 0111(7) 1000(8)。可以看到,第一位(从右到左数)为1的是1、3、5、7,OK,把1357四瓶水掺合在一起喂给老鼠1,同理,第二位为1的是2、6、7,把2、6、7喂给老鼠2,第三位为1的是6、7,把6和7喂给老鼠3,第四位为1的只有8号瓶了,把8号瓶喂给老鼠4.好,现在假设6是真的毒药,那么6对应的二进制是0110,给第二个老鼠和第三个老鼠喝过了,老鼠2和老鼠3都死了。于是4个老鼠就是0110,可以反推出瓶子6了。这个可以仔细酝酿思考一番。


OK今天就讲到这里,明天再来,讲讲编程基础
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: