计算机体系、语言的基础认识

冯诺依曼体系:
I/O:输入设备与输出设备
CPU:
            运算器:计算数据
            控制器:控制程序的运行
            CPU还有寄存器与多级缓存
存储器:磁盘(外存);内存(快):掉电即失
所有数据从磁盘到内存再到CPU
数据从内存先到寄存器再被CPU使用
 
计算机语言:
编译语言:源代码经本地编译后装还成目标机器的CPU指令
解释语言:源代码经解释器(Cpython、Ipython、pypi等)解释为字节码(bytecode),运行在虚拟机上,虚拟机将字节码转换为物理CPU识别的指令去运行(python,java输入解释型语言)
动态语言:变量类型不需要事先声明,可随时赋值为其他类型(python)
静态语言:变量类型需要事先声明,且不可更改(java、c++、c#等)
强类型语言:不同类型之间不可操作,必须转换成同一类型(没有隐式转换,python,java等)
弱类型语言:不同类型之间可以操作,自动隐式转换(javascript)
python是解释型动态强类型语言
 
python是有垃圾回收GC机制的,引用计数增加与减少,引用计数减少到0时会被GC捕获,在适当的时候进行垃圾回收
 
源码、反码和补码:
数据在计算机是以二进制形式存在的,计算机计算数据(加法)时用补码来运算
正数的源码、反码和补码相同
负数:
        源码转化为补码:符号位不变其余按位取反后加1
        补码的补码为源码
例子:1-2(等同于-2+1,计算机不会减法)
       1、先取-2与1的补码,-2补码为:1110;1的补码为:0001
       2、两个补码相加为:1111
       3、因1111为补码,所以需要将其转换成源码,而补码的补码为源码
       4、将1111符号位不变其余按位取反后加1后为:1001
       5、所以最终运算结果为1001(源码),转换为十进制即为-1
 
 
位运算符(二进制运算,负数需要先将其转换为补码再进行位运算):
&:按位与;都为1时为1(以正整数为例:1010&1100为1000)
|:按位或;有一个为1即为1(以正整数为例:1010|1100为1110)
~:按位取反:需要先将整数转换为补码后在取反;例子:~12
                     1、0000 1100(12的补码)
                     2、1111  0011 (取反后为补码,下一步将补码转换成源码)
                     3、1000 1101  (符号位不变,其余按位取反后加1即为源码)
                     4、转换为十进制即为-13
^:异或:按位相同为0,不同为1
<<:按位左移
>>:按位右移                    
运用位运算符是提高效率的方法。熟练使用位运算符

posted @ 2018-03-25 10:19  蘑菇的步伐  阅读(162)  评论(0编辑  收藏  举报