冯诺依曼体系:
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
<<:按位左移
>>:按位右移
运用位运算符是提高效率的方法。熟练使用位运算符