Hellow二进制

Hellow 二进制

在web和二进制中我一眼就看准了二进制,为什么会这样说的呢,可能是跟数字有缘,哈哈哈哈哈哈。确实,跟数字挺有缘的,毕竟小编的数学还是很不错的高考军考都是三位数呢,嘻嘻嘻,该低调还是要低调的,毕竟都是新人就让小编我分享一下这几天的所学吧!

二进制安全是什么?

二进制安全功能(binary- safe function)是指在一个二进制文件上所执行的不更改文件内容的功能或者操作。这能够保证文件不会因为某些操作而遭到损坏。二进制数据是按照一串0和 1的形式编码的。而绝大多数的程序会给某些特殊的比特串赋予不同的格式代码,所以当用户使用一个程序读取一个二进制文件时,该文件会被按照这个程序的规则进行解释。如果这个程序所使用的格式编码和文件被写入的格式编码一致,那么这个文件可以被正常读取,否则该文件的格式代码之中会被附加一些无意义的符号,也可能会导致文件损坏。如果最严重的情况发生,这样的操作会因为损坏导致你的数据永久丢失。

什么是进制

进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制—X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
例:
二进制 0 1 10 11 100 101 110 111 …
三进制 0 1 2 10 11 12 20 21 22 …
十进制 0 1 2 3 4 5 6 7 8 9 10 11 …
十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 …

如果有人问你1+1=3正确吗?怎么回答,如果在我还不知道进制的定义的情况下我肯定会说错的,要不然你就是在套路我。因为这个问题我也经常套路其他人,他们都选择不回答。
用进制来说明1+1=3
我们一般熟悉的十进制为0 1 2 3 4 5 6 7 8 9 逢十进一
我们来定义一个十进制:
十进制的定义:由十个符号组成,分别是0 1 3 2 5 8 9 7 6 4逢十进一。
如果用这样的十进制的话1+1就是等于3.

进制运算

首先我们得了解一个概念,叫“权”。“权”就是进制的基底的n次幂。如二进制的权就是(2)n 了,十进制的权就是(10)n ,看到十进制我们就很自然的想到科学计算法中的(10)n,对吧?有了权这个定义之后,我们就可以随便把一个进制的数转化成另一个进制的数了。

例子:
二进制 1111 转换为十进制
1111从右到左分别为 2的0次幂 2的1次幂 2的2次幂 2的3次幂
1×2的0次幂+1×2的1次幂+1×2的2次幂+1×2的3次幂= 1+2+4+8=15

二进制简写形式

在这里插入图片描述
为什么要使用二进制简写形式?
如果我们只是单单用二进制来书写到达一个较大的数字时二进制将会特别长所以为了节省空间使用二进制简写的方式。
例:11111101
使用简写方式后为FD

数据宽度

数学上的数字,是没有大小限制的,我们可以使用正无穷大负无穷。但是计算机由于受到硬件的制约,所以不能够随心所欲地保存数据,而是有所限制的,而且计算机做运算是依靠电路的变化来实现的,所以和我们数学中计算有很大的差异。如果我们的数据超过相应的数据宽度时我们多余的数据就会被丢弃,这样我们也不会得到我们想要的结果,所以我们在储存数据时一定要注意数据宽度。

在这里插入图片描述

在这里插入图片描述

有符号数与无符号数

举个例子对10110110进行编码
如果说这个例子是无符号数
二进制10110110转化为十六记进制为B6
原码、反码、补码均正常编码都是B6

如果说是有符号数
我们要清楚有符号数与无符号数的编码规则是不一样的,根据上面我们可以知无符号数的原码、反码、补码都一样而有符号数的原码、反码、补码是不一样的
原码

  • 首位为符号位(正数为0,负数为1),其余各位为数值本身的绝对值

反码

  • 正数的反码与原码相同
  • 负数的符号位为1,其余位对原码取反

补码

  • 正数的补码与原码相同
  • 负数的符号位为1,其余位对原码取反+1

用1来换算二进制为0000 0001
而-1的原码为1000 0001
我们可以看出他的最高为发生了变化
-1的反码为1111 1110
-1的补码为1111 1111

位运算

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。

运算符号

含义Pascal语言
a and b
a or b
异或a xor b
取反not a
左移a shl b
带符号右移a shr b
无符号右移/

and运算:and运算通常用于二进制的取位操作,例如一个数 and 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。

相同位的两个数字都为1,则为1;若有一个不为1,则为0。
00101
11100
(&;或者and)
————————
00100

or运算:or运算通常用于二进制特定位上的无条件赋值,例如一个数or 1的结果就是把二进制最末位强行变成1。如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。

相同位只要一个为1即为1。
00101
11100
(|或者or)
——————
11101

异或运算:异或的符号是^。按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0.
xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a xor b) xor b = a。xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥。1314520 xor 19880516 = 20665500,我就把20665500告诉MM。MM再次计算20665500 xor 19880516的值,得到1314520。

相同位不同则为1,相同则为0。
00101
11100
(^或者xor)
——————
11001

not运算:not运算的定义是把内存中的0和1全部取反。使用not运算时要格外小心,你需要注意整数类型有没有符号。如果not的对象是无符号整数(不能表示负数),那么得到的值就是它与该类型上界的差,因为无符号类型的数是用00到$FFFF依次表示的。
在这里插入图片描述
unsigned为无符号在编译器中定义a=100然后a进行not运算得到的返回值为65435

shl运算:a shl b就表示把a转为二进制后左移b位(在后面添b个0)。例如100的二进制为1100100,而110010000转成十进制是400,那么100 shl 2 = 400。可以看出,a shl b的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。
通常认为a shl 1比a * 2更快,因为前者是更底层一些的操作。因此程序中乘以2的操作请尽量用左移一位来代替。
定义一些常量可能会用到shl运算。你可以方便地用1 shl 16 - 1来表示65535。很多算法和数据结构要求数据规模必须是2的幂,此时可以用shl来定义Max_N等常量。

shr运算:和shl相似,a shr b表示二进制右移b位(去掉末b位),相当于a除以2的b次方(取整)。和上面一样的例子,那么400 shr2 = 100。我们也经常用shr 1来代替div 2,比如二分查找、堆的插入操作等等。想办法用shr代替除法运算可以使程序效率大大提高。最大公约数的二进制算法用除以2操作来代替慢得出奇的mod运算,效率可以提高60%。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值