C++二进制的详细介绍

来源:互联网 发布:openstack中网络配置 编辑:程序博客网 时间:2024/06/14 03:51

二进制是计算机的语言,用数字01.表示,0内表示的数据是没有数据的,1内表示的数据是有数据的,而他们的数据是怎么计算的呢,这用到了二进制转换不同进制的算法,通常在c++中计算机中的二进制8个位(bit)表示一个字符(英文字母),为什么说1个字节是8个计算机中的位呢,先来说下,计算机中的0101这表示的4个位,01这是2个位,1,这是一个位,也就是说计算机中的每一个二进制01占一个位,这是计算机二进制语言的最小单位,那么你是怎么知道在c++中一个字节在计算机里面占8个位呢,好了,现在我们来做一个测试,定义一个int a=22 的变量,这是对计算机进行存储内存的,现在我们来观察一个&a在计算机语言中的地址是怎样的:

字面上的16是一个字节,这是一个16进制的数,现在我们用程序员计算器进行转换成二进制,看看情况:

结果发现16转成二进制的时候有8个数,分别是01显示的,二前面已经说了,16这是一个字节,那么说明了什么呢,说明了在c++中一个字节在计算机语言二进制那里占有8个位,有人会有这样的想法,不是说16进制的数都可以用二进制转换吗,那么我把16进制的数给定义大点,位数是不是多了呢?这个啊,现在我们来做个实验,现在来用程序员计算器,这8个位中我们全部写1的情况下看看10进制的是多少:

结果发现二进制的11111111转成10进制就是255,现在我们对int a进行定义为256看看情况:

第一个字符全占满的情况下是255,也就是说第一个字节满值为255256超过了这个值就自动跳到了第二个字节了也就是这里的01这里的00010000表示的就是4个字节每00表示一个字节,4个了,当跳到第二个字节的时候就是255之后的位置了,好了现在来看看输入1111111111111111,这是16个位也就是2个字节,现在来定义一个short类型进去看看情况short int a=65535

现在来赋值65534看看情况:

什个情况啊,不管了,反正就是计算机自己处理的,他觉得怎样处理你定义的那个值由好处就怎样处理,看一副图再来说:

你定义的不是一个int类型或short类型的吗,int类型定义的时候在计算机内存是这样描述的:0000 0000 0000 0000 0000 0000 0000 0000,这就是在计算机中开辟32个位,256是一个偶数吧正好是2n次方,说明他在某个位置的值就是256,这是因为你定义的位够多,假如我定义一个char类型的0000 0000 定义一个9,此时计算机就会这样算,23次方是8,也就是说从右到左数的第4个数是1,再加上一个1也就是0000 1001,现在来用计算器看下是不是对的:

结果是对的啊,只不过他在左边没加0而已,左边都是0不就是0吗,只不过我们开辟的是8个位的二进制啊,说明一下,计算机计算二进制的时候最小是4个位的,也就是说1表示二进制就是0001c++中最小的单位是一个字节,也就是8个位0000 0000

上面的256我用short是不是可以这样表示啊,0000 0001 0000 0000255就是0000 0000 1111 1111256不就是在255上加1吗,最右边加1就是2了,进一位就是0000 0000 1了,注意我这是为了效果才这样写的,上面的00010000我们可以这样写,不是4字节吗,每两个0占一个字节0000 0000 0000 0001 0000 0000 00000000,前面的0000 0000这就是最右边的位了也就是底位了我们可以这样写0000 0000 0000 0000 0000 0001 0000 0000,这样在计算机中就是正确的写法,第一种是c++的写法;

现在我们来看一个例子:

上面a的指针10进制值是19197952c的指针10进制是19197954,说明相差是2啊这是相对于10进制的,来看看二进制的值0001001001001111000000000000                                      0001001001001111000000000010

 

 

这里是加了2啊也就是二进制的10,再来看看:

这里对指针加1就相当于10进制里面的加1010进制就是加2,为什么是加2啊,这个要问编译器的,编译器认为那两个类型是相邻的第一个是2个字节的,所以就加了2这个指针应该是内存里面的那个顶针,加1那个指针向上移一位,找到下一个内存低针!

计算机中10进制小数二进制表示法:

0.5=2*0.5=1

0.6=2*0.6=1,余0.2*2=0,余0.4*2=0,余0.8*2=1,以此循环直到为0为止。1001……这是从高位到低位的。

二进制111.11转换成10进制这样表示:1*2^2+1*2^1+1*2^0+1*2^-1+1*2^-2=4+2+1+0.5+00.25=7.75;