IOS笔记-计算机中的进制 反码补码 和存储细节

1、计算机中的进制

 

    计算机能够识别的只有二进制 0、1

 

    进制就是一种计量的单位

 

2、常见的进制:

 

 二进制:逢二进一  用0、1来表示,定义一个二进制的数:0b 或者 0B  ,0B1010(2)=10(10)

 

 八进制:逢八进一  用0-7之间的数字表示,定义一个八进制的数:0 开头

 

 

10进制:逢10进一  用0-9之间的数字表示,定义一个十进制的数(默认)

 

16进制:逢16进一  用0-9表示16进制中的0-9,用A-F表示16进制中的10-15

 

        定义一个16进制的数,用0x或者0X开头

 

3、进制的转换问题

 

10--->2 : 除2取余法,取余数逆序  (把一个10进制的数每次除以2,得到余数)

2---->10: 用二进制的每一位乘以2的(x)次方,

   

           如果是正整数:x从右至左,从0开始依次增1

           如果是实数:  x从小数部分开始,从左至右,x依次增加1

 

           010101110.10101

 

 

10-->8:除8取余,取余数的逆序

2--->8:取出三位(二级制)合成 1位(8进制) 

        01 101 101= 155

8--->2:取出1(8进制)拆成3位(二进制)

 

 

2--->16:取出四位(二进制)合成 1位(16进制)

16-->2 :一拆四,取出1位(16进制)拆成 4位(二进制)

 

 

8--->16:  8---->2---->16:先是1拆3,然后4合一

16-->8 :  16--->2---->8 :先是1拆4,然后3合一

 

 

4、原码、反码、补码

 

    为什么要引入反码和补码?

 

    存储一个负数,主要还是用来优化计算机的减法运算

 

  

    原码:一个正数的二进制表示,原码

         整数的原码、反码、补码都是一样的

 

    反码:符号位不变,其他位按位(逐位)取反的结果

 

    补码:反码+1

 

         00000000 00001010

     

    取反:11111111 11110101

    +1   11111111 11110110   -5

 

 

5、位运算

 

    &   |  ~  >>  <<

 

    & 按位与       口诀:同1为1

    | 按位或       口诀:有1为1

    ~ 按位取反     口诀:1变0,0变1

 

    >>右移位       把一个数的二进制位逐位向右移动 a>>1  把a向右移动1位

                  相当于/2

                  注意:向右移位,移出的那位删除,左侧补符号位

 

    <<左移位       把一个数的二进制位逐位向左移动 a<<1  把a向左移动1位

 相当于*2

                  注意:

                  向左移位,有可能会改变一个数的正负性

                  向左移位,移出的位被删除,右侧补0

 

                  

                  任何数和1进行&操作,相当于取这个数的二进制的最后一位。

 

6、变量在内存中的存储细节

 

    int  4个字节 %d %i

    float 4个字节 %f

    double 8个字节%f

    long  8个字节(64),32位下4个字节

    long long 8个字节,

 

7、变量类型的修饰符

  

    short int  2个字节  %hd  

 

    10000000 00000000     -2(15)(-32768)

 -1 00000000 00000001

 ------------------------

    01111111 11111111      2(15)-1(32767)

 

 

    long       8个字节  %ld -2(63) ~ 2(63)-1

    long long  8个字节  %lld

    signed int 4个字节  %d

    unsigned int 4个字节 %u

 

8、字符型

 

    字符型数据在内存中如何存储的?

    字符型单字节(8位)

 

    字符型存储过程 ---->整数--->2进制---->内存(字符对应的整数可以查询ascii码表)

    取出字符的过程内存---->二进制--->整数---->查出对应的字符

 

    char ch;

    ch='a';    -->97

   

    %d   97

    %c   a

 

    字符型和整形可以互相转换

posted @ 2015-05-13 11:07  --------  阅读(450)  评论(0编辑  收藏  举报