赶时髦,python这么火,学习一哈
计算机发展历史上最重要的预测法则 摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu、内存、硬盘、电子产品价格等都遵循此定律
50年来计算机是唯一一个指数发展的领域
源代码、目标代码(机器代码)
静态语言编译器一次性生成目标代码,优化更冲份,程序运行速度更快
脚本语言 执行程序时需要源代码,维护更灵活
程序的基本设计方法IPO
I:input 文件输入、网络输入、控制台输入、交互界面输入、内部参数输入
O:output 控制台输出、图形输出、文件输出、网络输出、操作系统内部输出
-分析问题:分析问题的计算部分,想清楚
-划分边界:划分问题的功能边界,规划IPO
-设计算法:设计问题的求解算法,关注算法
3个精简步骤:确定IPO、编程、调试运行
计算思维(编程体现了一种抽象交互关系、自动化执行的思维模式)、逻辑思维、实证思维
psf 拥有者,开放、开源精神
需求:摄氏度与华氏度相互转换
缩进是语法要求 一般4个空格或者1个tab 表达代码间包含和层次关系的唯一手段
命名:给变量关联标识符的过程
命名大小写敏感、首字符不能是数字、不与保留字相同
保留字:被编程语言内部定义并保留使用的标识符 也大小写敏感 33个
正向递增序号、反向递减序号 正向0开始编号
索引: 可以使用[M]索引其中单个字符
切片:可以使用[M:N]返回其中一段子串,从第M到第N-1个字符
数字类型:整数、浮点数
列表:表示0到多个数据组成的有序序列,采用,分隔各元素,使用in判断一个元素是否在列表中
eval 评估函数 去除参数最外侧引号并执行余下语句的函数
新计算时代 过度到人工智能时代的中间时代
编程语言的初心
Python语言是通用语言、脚本语言、开源语言、跨平台语言、多模型语言
--较少的底层语法元素
--快速增长的计算生态 每年2万
Python是最高产的程序设计语言
工具决定思维:关注工具变革的力量!
python具有最庞大的生态库,是唯一的超级语言,前进步伐不可阻挡
turtle库是turtle绘图体系的Python实现 1969年诞生,主要用于程序设计入门 Python的标准库之一 入门级的图形绘制函数库
Python计算生态=标准库+第三方库
有一只海龟,其实在窗体正中心,在画布上游走,走过的轨迹绘制的图形,海龟由程序控制,可以变换颜色宽度
turtle的一个画布空间 最小单位是像素
屏幕坐标系:屏幕左上角为0 0
画笔操作后一直有效,一般成对出现
画笔设置后一直有效,直到下次设置
控制海龟行进:走直线&走曲线
整数类型:可正可负 取值无限 pow(x,y) x的y次方
浮点型 10的308次方 精度达到:10的-16次方小数 即53位二进制 与数学中实数一致
不确定尾数 (浮点数运算)不是bug 53位二进制表示浮点数的小数部分 约10的-16次方 计算机中的二进制和十进制不完全对等
二进制表示小数,可以无限接近,但不完全相同
二元操作符有对应的增强赋值操作符
int(x) 显示类型转换, 变为整数,舍弃小数
问题分析:持续的价值 一年365天每天进步1%,累计进步多少?相反,每天退步1%,累计剩下多少?如果三天打渔二天晒网呢?
如果是工作日的力量?工作日进步1%,休息日退步1%
工作日的努力要达到多少才能和每天努力1%一样?
由一对单引号或双引号表示单行字符串
三单引号表示字符串,程序啥都不执行,相当于注释,python实际没有真正提供多行注释
[M:N:K]根据步长对字符串切片 M和N均可以缺失,表示至开头或至结尾
x+y 连接两个字符串
字符串处理函数
字符串处理方法
格式化是对字符串进行格式化表达的方式
槽 相当于占位信息符,只在字符串中有用
前三个参数是一组 默认填充空格左对齐
time库是Python中处理时间的标准库
问题分析:采用字符串方式打印可以动态变化的文本进度条 能在一行中逐渐变化
刷新的本质:用后打印的字符覆盖之前的字符
idle不是主要的运行环境 所以\r功能在idle屏蔽了 用shell执行
紧凑形式:适用于简单表达式的二分支结构
问题分析:BMI是身体肥胖程度的刻画(BODY MASS INDEX) BMI=体重(kg)/身高的平方(m),接收用户信息判断身体肥胖程度
列表遍历循环ls是列表
文件遍历循环 fi是文件标识符
循环扩展:两种循环后面都可以加else分支 else为没有被break退出是执行的,作为正常运行的奖励
计算机没法产生真正的随机数,但是可以使用梅森旋转算法产生伪随机数
random库包括2类函数,常用共8个
为什么要使用随机数种子呢,因为可以使用相同的随机数种子复现程序的执行情况
据统计,程序80%的时间消耗在不到10%的代码上 有点儿类似28法则
函数是一段具有特定功能可复用的语句
其中参数可以是0个到多个,是占位符
函数不经过调用是不会执行的
函数也是一段完整代码的封装
可选参数传递:可以为参数指定默认值,变为可选参数,可选参数要放在非可选参数之后
可变参数传递:不确定参数有多少个
默认是按照位置,可以按照名称方式传递
return可以返回0个或多个结果
函数可以有返回值也可以没有
可以有return 也可以没有
返回多个值的时候是返回元组类型 用() 元素用逗号分隔
函数外边的是全局变量,里面是局部变量
局部变量是函数内部的占位符,可能与全局变量重名单不相同
函数运行结束后局部变量被释放
规则1:局部变量与全局变量是不同变量
可以使用global保留字在函数内部使用全局变量
规则2:局部变量如果是组合数据类型且未被创建,等同于全局变量 组合数据类型实际是指针的原因
lambda函数返回函数名作为结果
lambda函数是一种匿名函数,没有名字的函数
lambda函数用于定义一种简单的能够在一行内表示的函数
是一种函数的紧凑表达形式
一般就算是1行代码,也建议用def方式定义
问题分析:用turtle绘制数码管样式的时间
代码抽象化:使用函数等方法对代码赋予更高级别的定义
函数和对象是代码复用的2中主要形式
函数是在代码层面建立了初步抽象
对象有属性和方法,是更高级别的抽象
通过函数或对象封装将程序划分为模块与模块间的表达
主程序、子程序与子程序之间的关系
一般将子程序看作模块,主程序看作模块与模块间的关系
是一种分而治之、分层抽象、体系化的设计思想
紧耦合:两个部分之间交流很多,无法独立存在
松耦合:两个部分之间交流很少,可以独立存在,有各自清晰简单的接口
模块化设计基本思路和原则:模块内部紧耦合,模块之间松耦合
函数递归:函数定义中调用自身的方式
链条:计算过程存在递归链条
基例:存在一个或者多个不需要再次递归的基例 递归的最末段
类似数学归纳法,先证明第一个取值命题成立,然后第n个取值命题成立,第n+1取值命题也成立,那么命题成立
递归可以理解为数学归纳法思维在编程中的体现
函数+分支语句 :基例和链条分别编写代码
集合是多个元素的无序组合,每个元素唯一,不存在相同元素
集合元素不可更改,不能是可变数据类型,比如列表类型就不能作为元素,整数浮点数复数字符串元组类型等都是不可变数据类型
用{}表示,元素间用逗号分隔
建立空集合必须用set()
S.pop() 随机返回S的一个元素,更新S,若S为空产生KeyError异常
set(x) 将其他类型变量x转变为集合类型
序列是有先后顺序的一组元素
序列是一维元素向量,元素类型可以不同,类似C语言中的一维数组
元素间由序号引导,通过下标访问序列的特定元素
一般不直接用序列类型而是使用其衍生类型,比如字符串、元组、列表
元组是一种序列类型,一旦创建就不能被修改
使用()或者tuple()创建,元素间用逗号分隔
可以使用或不适用小括号,比如函数返回多个返回值就是使用没有括号的元组类型,python内部认为是一个值,是一个元组
元组类型继承了序列的所有通用操作
元组类型因为一旦定义不能修改,所以没有特殊操作
列表是序列类型的扩展,十分常用
列表是一种序列类型,创建后可以随意修改,长度无限制,元素类型可不同
列表本质是指针,如果通过赋值语句给另外一个变量,那么实际并没有创建一个新列表,可以类似linux的硬链接,[]或者函数list()才是真正创建一个列表,赋值仅仅传递引用
元组用于元素不改变的场景,更多用于固定场景 比如函数返回值
列表则更加灵活,是常用的序列类型
最主要作用:表示一组有序数据并进而操作它们
数据保护 利用元组不可修改的特性
问题分析:给出一组数据,给出概要理解,比如 求和、平均值、方差、中位数…
方差:各数据与平均值的平方的和的平均数
中位数:排序,取中间的或者中间2个数平均数
映射 是一种键(索引)和值(数据)的对应
type()可以检测变量的类型
{}可以用来声明空字典,这就是集合类型中定义空集合不能用{}的原因
优秀的中文分词第三方库
由于中文是连续书写的 需要通过特定手段获得单个词语
jieba库提供3种分词模式,最简单只需要掌握一个函数
通过中文词库方式识别确定汉字之间关联概率 概率大的组成词组,形成分词效果
除了分词,用户也可以添加自定义的词组
精确模式:把文本精确的切分开,不存在冗余单词 最常用的分词模式
全模式:把文本中所有可能的词语都扫描出来,存在冗余
搜索引擎模式:更加智能,在精确模式的基础上,对长词再次切分,存在冗余,在某些特定场景下使用
6.6 实例10:文本词频统计
问题分析:一篇文章,出现了哪些词?哪些词最多?
中英文各一个程序:分别是哈姆雷特和三国演义
文本文件、二进制文件 只是展示方式,本质上都是二进制数据
文本文件:由单一特定编码组成的文件,如utf-8编码 由于存在编码,文本文件也被看为一个长字符串
二级制文件:数据间没有统一字符编码,01组成,比如png avi等文件
文件路径和名称,使用相对路径或者绝对路径,同一个路径的话就直接文件名,斜杠\是转移字符使用反斜杠/替换,或者\\
当程序退出的时候,python也会自动关闭文件
问题分析:根据脚本来绘制图形 不是写代码而是写数据绘制轨迹
扩展接口设计,增加更多控制接口
扩展功能设计,增加弧形等更多功能
扩展应用需求,发展自动轨迹绘制到动画绘制
一维数据:由对等关系的有序或无序数据构成,采用线性方式组织,对应列表、集合、数组等概念
二维数据:由多个一维数据组成,是一维数据的组合形式
多维数据:是一维或二维数据在新唯独上扩展形成,比如中国大学排行榜加入时间维度
高维数据:仅利用最基本的二元关系展示数据间的复杂结构,比如字典类型中的key-value形式
如果数据间有序,使用列表类型
如果数据间无序,使用集合类型
两层for循环遍历二维列表
每行一个一维数据,无空行
一般的软件都能生成csv格式文件
如果每个元素缺失,逗号要保留
表头可以作为数据存储,也可以令行存储
如果数据中包含逗号,不同的软件有不同的约定,比如转义符或者其他方式
按行存或者按列存都行,一般索引习惯 ls[row][col] 先行后列,按行存
可以根据文本中词语出现的频率等参数绘制词云
绘制词云的形状、尺寸、颜色都可以设定
配置参数、加载文本、输出文件
setp1:配置对象参数
setp2:加载词云文本
step3:输出词云文件
a.分隔:以空格为分隔单词
b.统计:单词出现次数并过滤
c.字体:根据统计配置字号
d.布局:颜色环境尺寸
max_words 指定词云显示的最大单词数量,默认200 比如词云显示的不那么有力,可以修改这个
默认显示的矩形效果,使用mask参数可以改变
中文的话需要先用jieba库分词,中文不是空格分隔的
将一个总问题表达为若干个小问题组成的形式
使用相同的方法进一步分解小问题
解决复杂问题的有效设计方法
逐步组建复杂系统的有效测试方法
实证思维:以实验和验证为特征,以物理为代表,引力波<-实验
计算思维:以设计和构造为特征,计算机为代表,汉诺塔递归
有非常明显的特征:抽象和自动化,抽象问题的计算过程并利用计算自动化求解(并不是抽象因果关系仅仅是抽象过程)
计算思维基于计算机强大的算力和海量的数据
抽象计算过程,关注设计和构造,而非因果
以计算机程序设计为主要实现手段
编程是将计算思维变为现实的手段
计算生态与Python语言
-1998年,网景浏览器开源,产生了Mozilla,开源生态逐步建立
计算生态以开源项目为组织形式,充分利用“共识原则”和“社会他人”组织人员,在竞争发展、相互依存和迅速更迭中完成信息技术的更新换代,形成了技术的自我演进路径。
开源思想深入演化和发展,形成了计算生态
计算生态是没有顶层设计、以功能为单位、具备三个特点:竞争发展、相互依存和迅速更迭
-计算生态加速科技类应用创新的重要支撑
-发展科技产品商业价值的重要模式
-国家科技体系安全和稳固的基础
刀耕火种 –> 站在巨人的肩膀上
-编程的起点不是算法而是系统
-变成如同搭积木,利用计算生态为主要模式
-编程的目标是快速解决问题
优质的计算生态 python123 由老师、产业人员共同筛选的优质生态
实现功能 –> 关注体验
用户体验指用户对产品建立的主管感受和认识
关心功能实现,更要关心用户体验,才能做出好产品
编程只是手段,不是目的,程序最终为人类服务
-如果程序需要计算时间,可能产生等待,请增加进度展示
-如果程序需要若干步骤,需要提示用户,请增加进度展示
-如果程序可能存在大量次数的循环,请增加进度展示
-当获得用户输入时候,对合规性需要检查,需要异常处理
-当读写文件时,对结果进行判断,需要异常处理
-当进行输入输出时,对运算结果进行判断,需要异常处理
-打印输出:特定位置,输出程序运行的过程信息verbose
-日志文件:对程序异常以及用户的使用进行定期记录
-帮助信息:给用户多种方式提供帮助
软件程序 到 软件产品,其核心关键就是用户体验
配置化设计 (自动轨迹绘制实例)
-引擎+配置:程序执行和配置分离,将可选参数配置化
-将程序开放变为配置文件编写,扩展功能而不修改程序
-关键在于接口设计,清晰明了,灵活扩展,这是一种更高级别的设计思路
-产品定义,而不仅是功能定义,要考虑商业模式
2.系统架构 以系统方式思考产品的技术实现
-系统架构,关注数据流、模块化、体系架构
3.设计与实现 结合架构完成关键设计及系统实现
-结合可扩展性、灵活性、是否适应未来需求变化等进行设计优化
4.用户体验 从用户角度思考应用效果
-用户至上,体验优先,以用户为中心构造软件产品
看见更大的Python世界
13万个第三方库 全区社区
-学会检索并利用PyPI,找到合适的第三方开发程序
-方法1(主要方法):使用pip命令
pip安装方法(最主要的方法)
列出某个第三方库的详细信息
结合安装工具,批量安装,不过这样的安装工具不多,推荐一个叫anaconda
为什么有些第三方库用pip可以下载,单无法安装?
-某些第三方库下载后,需要编译再安装
-如果操作系统没有编译环境,则能下载单不能安装
UCI页面 加州大学教授维护的 win系统的直接编译后的版本
os库提供通用的、基本的操作系统交互功能
是python标准库,由几百个函数,包括常用路径操作、进程管理、环境参数等几类
-路径操作:os.path子库,处理文件路径及信息
-进程管理:启动系统中其他程序
-环境参数:获得系统软硬件信息等参数
os.path子库以path为入口,用于操作和处理文件路径
获取或改变系统环境信息
用程序自动安装这20个第三方库
从数据处理到人工智能的完整链条:数据表示->数据清洗->数据统计->数据可视化->数据挖掘->人工智能
Numpy:表达N维数组的最基础库
-Python接口使用,C语言实现,计算速度优异
-提供直接的矩阵运算、广播函数、线性代数等功能
-提供了简单易用的数据结构和数据分析工具
-理解数据类型与索引的关系,操作索引即操作数据
Scipy:数学、科学和工程计算功能库
-提供了一批数学算法及工程数据运算功能
-类似Matlab,可用于傅里叶变换、信号处理等应用
Python库之数据可视化
Matplotlib:高质量的二维数据可视化功能库,有大量子库
-提供了超过100种数据可视化展示效果
Seaborn:统计类数据可视化功能库
-提供了一批高层次的统计类数据可视化展示效果
-主要展示数据间分布、分类和线性关系等内容
Mayavi:三维科学计算可视化功能库
-提供了一批简单易用的3D科学计算数据可视化展示效果
-目前是Mayavi2,三维可视化最主要的第三方库
PyPDF2:用来处理pdf文件的工具集
-提供了一批处理PDF文件的计算功能
-支持获取信息、分隔/整合文件、加密解密等
-完全Python语言实现,不需要额外依赖,功能稳定
NLTK:自然语言文本处理第三方库
--提供了一批简单易用的自然语言文本处理功能
-支持语言文本分类、标记、语法句法、语义分析等
-增加并配置段落、图片、表格、文字等,功能全面
-提供一批统一化的机器学习方法功能接口
-提供聚类、分类、回归、强化学习等计算功能
-机器学习最基本且最优秀的Python第三方库
-谷歌公司推动的开源机器学习框架
-将数据流图作为基础,图节点代表运算,边代表张量
-应用机器学习方法的一种方式,支撑谷歌人工智能应用
MXNet:基于神经网络的深度学习计算框架
-提供可扩展的神经网络及深度学习计算功能
-可用于自动驾驶、机器翻译、语音识别等众多领域
霍兰德认为:人格兴趣和职业之间有内在的对应关系
人格分类:研究型、艺术型、社会型、企业型、传统型、现实型
职业:工程师、实验员、艺术家、推销员、记事员、社会工作者
需求:雷达图方式验证霍兰德人格分析
输入:各职业人群结合兴趣的调研数据
展示多维数据以及绘制雷达图的能力
-编程的目标感:寻找感兴趣的目标,寻(wa)觅(jue)之
-编程的沉浸感:寻找可实现的方法,思(zuo)考(mo)之
-编程的熟练度:练习、练习、再练习,熟练之
编程不是最主要的,编程的感觉才是最重要的
-提供了简单易用的类HTTP协议网络爬虫功能
Scrapy:优秀的网络爬虫框架
-提供了构建网络爬虫系统的框架功能,半成品
-支持批量和定时页面爬取、提供数据处理流程等
-提供了完整的网页爬取系统构建功能
-支持数据库后端、消息队列、优先级、分布式架构等
Re:正则表达式解析和处理功能库
-提供了定义和解析正则表达式的一批通用功能
-可用于各类场景,包括定点的Web信息提取
-提供了对Web页面中文章信息/视频等元数据的提取功能
-针对特定类型Web页面,应用覆盖面较广
相对于bs4库,抽象层次更加高,更加方便
-提供了构建Web系统的基本应用框架
-Python最重要的Web应用框架,略微复杂的应用框架,比较适合专业的网站构建
-提供了简单方便构建Web系统的应用框架
-不大不小,规模适中,适合快速构建并适度扩展类应用
-提供了最简单构建Web系统的应用框架
-特点是:简单、规模小、快速
Python库之网络应用开发
WeRoBot:微信公众号开发框架
-提供了解析微信服务器消息及反馈消息的功能
-建立微信机器人的重要手段
aip:百度AI开放平台接口
-语音、人脸、OCR、NLP、知识图谱、图像搜索等领域
MyQR:二维码生成第三方库
-提供了生成二维码的系列功能
-基本二维码、艺术二维码和动态二维码
Python库之图形用户界面
-Qt是非常成熟的跨平台桌面应用开发系统,完备GUI
PyGame:简单的游戏开发功能库
-提供了基于SDL的简单游戏开发功能及实现引擎
-理解游戏对外部输入的相应机制及角色构建和交互机制
Panda3D:开源、跨平台的3D渲染和游戏开发库
-一个3D游戏引擎,提供Python和C++两种接口,Python接口更加全面也是该库推荐使用的语言
-支持很多先进特性:法线贴图、光泽贴图、卡通渲染等
-由迪士尼和卡内基梅隆大学共同开发
cocos2d:构建2D游戏和图形界面交互应用的框架
-提供了基于OpenGL的游戏开发图形渲染功能
-支持GPU加速,采用树形结构分层管理游戏对象类型
-提供大量与vr开发相关的功能
-针对树莓派的vr开发库,支持设备小型化,配置简单化
-非常适合初学者实践vr开发及应用
-基于成熟的VR设备,提供全套文档,工业级应用设备
-专业的企业级虚拟现实开发引擎
-支持多种主流的VR硬件设备,具有一定的通用性
Quads:迭代的艺术
-对图片进行四分迭代,形成像素风
-可以生成动态或者静态图片
-简单易用,具有很高展示度
-输出可以是纯文本或彩色文本
-可采用图片格式输出
9.5 实例16:玫瑰花绘制
JAVA的运算符,分为四类:
算数运算符、关系运算符、逻辑运算符、位运算符
Java基本数据类型:
注:算数运算符操作数必须是数值类型。
分为一元运算符和二元运算符;
一元运算符,只有一个操作数;
二元运算符有两个操作数,运算符在两个操作数之间。
一元运算符:正‘+’,负‘-’,自加‘++’,自减‘--‘这四个。
①”++“和”--“运算符,只允许用于数值类型的变量,不允许用于表达式中;
”++“和”--“用于数值变量之前,在赋值操作中,先对被”++“或”--“操作变量值先加1或者先减1,然后在进行其他的操作;
注:一元运算符和前后的操作数之间有空格,可能在有些编译器下编译时会出错。
在算数运算符中,”+“,”-“,”*“,”/“完成加减乘除四则运算,%是求两个操作数相除后的余数。
运算规则和数学运算基本相同,在算数运算中,计算时按照从左向右的顺序计算,乘除和求余优先于加减,不同的是,程序中的乘运算符不可省略,在数学中可写为”y=2x“而程序中必须写为”y=2*x“。
当二元运算的两个操作数的数据类型不同时,运算结果的数据类型和参与运算的操作数的数据类型中精度较高(或位数较长)一致。
低精度到高精度会自动转换,而高精度到低精度则要类型强制转换。
位:一个二进制数据0或1,是1bit(位);
①数值计算中语法现象——“晋升”,即:byte、short和char(低于int的数据类型)进行算术运算后,结果会自动提升成int类型;
②两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换;
③算数运算可以加入小括号"()"提高优先级,优先小括号内运算,再其他运算符运算;
④算数运算前操作数变量必须赋值,反之,报语法错误。
二:关系运算符:
关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean布尔类型)的数值。
注: boolean类型只能比较相等和不相等,不能比较大小;
判断相等的符号是两个等号,而不是一个等号,这个需要特别小心。
实际代码中,数值、变量以及运算结果都可以直接参与比较,只是程序中为了增强可读性,有些时候需要将比较分开进行书写。
比较运算符是程序设计中实现数据比较的基础,也是很多逻辑实现的基础,在程序逻辑中,经常通过比较一定的条件,来判断后续的程序该如何执行。
逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。
逻辑运算的数据和逻辑运算符的运算结果是boolean类型。
A和B是逻辑运算的两个逻辑变量;
两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。 &和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。 对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。 所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。 对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。 所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程; 对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。 所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。
在程序设计时使用&&和||运算符,不建议使用&和|运算符。
位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
位运算的位与'&',位或'|',位非'~',位异或'^'与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值boolean型。下边为位&运算:
右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。
将一个数左移"<<"会使该值乘以2的幂。 将一个数右移>>"会使该值除以2的幂。
即运算结果为z等于二进制数,即z等于十进制数17。即运算结果为z等于二进制数,即z等于十进制数-18。 右移和左移操作,是整数机器数的补码表示法。
&运算符规定必须信号A和B都被充电,其结果才是充电。(1表示充电,0表示未充电)
^异或(XOR)运算符规定如果信号A或B之一被充电,但是信号A和B不是同时被充电,则结果为充电。
~运算符也称为按位求补,它翻转所有的充电状态值。
五:赋值运算符与其他运算符的简捷使用方式 :
① 赋值运算符可以与二元算术运算符、逻辑运算符和位运算符组合成简捷运算符,从而可以简化一些常用表达式的书写。
在程序开发中,大量使用“一元运算符或移位运算符等”该区别简化代码的书写,这样做,因为这样将增加阅读代码的难度,尽量注释。
② 方括号[]和圆括号()运算符 方括号[]是数组运算符,方括号[]中的数值是数组的下标,整个表达式就代表数组中该下标所在位置的元素值。
圆括号()运算符用于改变表达式中运算符的优先级。
当操作数是字符串时,加(+)运算符用来合并两个字符串;当加(+)运算符的一边是字符串,另一边是数值时,机器将自动将数值转换为字符串,并连接为一个字符串。
强制类型转换符能将一个表达式的类型强制转换为某一指定数据类型
优先级自上而下,级别由高到低。