中小学生学python_《中小学生Python编程入门指南》 附录一

我们怎么看懂二进制的大小呢?换句话说,二进制怎么转化成十进制来理解呢?

举个例子,比如说有一个8位的二进制数“01011011”如下,转换为十进制的,应该怎么转化?

二进制数的每一位数都是2的几次幂,就像我们的十进制一样,0是10的0次幂(100),10是10的1次幂(101),100是10的2次幂(102)。上述“01011011”对应每个位置的幂数如下:

二进制数转化十进制就是每个位所代表的数值和每个位的数值相乘后相加,也就是:

(27* 0) + (26* 1)+(25* 0)+(24* 1)+(23* 1)+(22* 0)+(21* 1)+(20* 1)

因为整数乘0等于0,乘1等于本身,那么上述计算可简化为:

26+24+23+21+20= 64 + 16 + 8 + 2 + 1 = 91

也就是说,我们只需要计算数字为1的位所代表十进制数的和就可以了。

那我们知道了二进制转十进制,那十进制如何转二进制呢?我们可以使用求余的方法计算,比如刚才的91,如下图:

由下往上将余数组合起来就是“1011011”,前面补0凑齐8位就是01011011。

2、二进制的运算规则。

十进制的计算规则我们都很清楚了,那么二进制又是怎么计算的呢?其实是有规律的,因为只有0、1两个数,规则就简单很多:

加法:0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 10(进1位)

减法:0 - 0 = 0, 1 - 0 = 1, 1 - 1 = 0, 0 - 1 = 1(借1位)

乘法:0×0 = 0, 1 × 0 = 0, 0 × 1 = 0, 1 × 1 = 1

除法:0 ÷ 1 = 0, 1 ÷ 1 = 1(0不能为除数)

看起来很多,其实细看一下,跟十进制是一样的,只不过是“逢2进1”的区别,我们可以举例看一下,比如使用1001和0101的四则运算如下图所示:

二进制的运算,一般比较少用到,更为常用的是与、或、非、异或的运算,规则更为简单:

与:1 & 1 = 1, 1 & 0 = 0, 0 & 1 = 0, 0 & 0 =0(其实就是0和任意数字做与运算都为0,与的符号为&)

或:1 | 1 = 1, 1 | 0 = 1, 0 | 1 = 1, 0 | 0 = 0(1和任意数字做或运算都为1,或的符号为|)

非:~1 = 0, ~0 = 1(其实就是取反,反过来了,非的符号为~)

异或:1 ^ 1 = 0,1 ^ 0 = 1, 0 ^ 1 = 1, 0 ^ 0 = 0(相同的为0, 不同的为1,异或的运算符为^)

3、我们学了2.1节之后就知道数值有整数和浮点数之分,整数的存储我们比较好理解,就是通过二进制的存储方式来存储十进制。但是如果有负数我们应该怎么存储呢?所以整数可以分为有符号数和无符号数。

有符号数:计算机将存储的最高位用来作为符号位,最高位为0,表示正数,最高位为1,表示负数。

无符号数:将全部位数用来表示数值,没有符号位,不能表示负数。

我们知道了计算机存储整数的方法,那么计算机做整数运算的话该怎么计算呢?

举个例子,如果计算1 - 1的话,按照我们已知的计算方法应该是如下计算:

1 - 1 =  1 + (-1) = (00000001) + (10000001) = 10000010 = -2 ≠ 0

这显然是不正确的。为了解决这个问题,整数又分了三种编码方式:原码、反码、补码。

原码:在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小。

反码:正数的反码与其原码相同。负数的反码是对其原码逐位取反,但符号位除外。

补码:正数的补码与其原码相同,负数的补码就是对该负数的反码加1。0的补码为0。

【从定义可以看出,正数的补码,反码,原码相同。0的补码就是本身。那么负数的原码和补码如何转换呢?已知一个负数求补码方法:绝对值原码按位求反加1。已知负数补码求负数方法:符号位不变,其他位按位求反加1。】

反码能解决上述问题吗?我们再算一下:1的反码为000000001,-1的反码为11111110,计算如下:

1 - 1 = 1 + (-1) = (00000001) + (11111110) = 11111111 = -0

1 - 2 = 1 + (-2) = (00000001) + (11111101) = 11111110 = -1

结果都是正确的,但是又有一个问题,0是没有+0和-0的区别的。

我们在看一下补码的计算:

1 - 1 = 1 + (-1) = 00000001 + 11111111 = 00000000 = 0

1 - 2 = 1 + (-2) = 00000001 + 11111110 = 11111111 = -1

结果都是正确的,显然,计算机使用补码来存储和计算是比较方便的。

在Python里面,整数是无限大的,理论上内存多大,整数就可以多大,所以int类型的数据没有范围,但是如果在C语言中,int类型则有一些受限,比如是在32位的电脑中,int占32位,取值范围为-2147483648~2147483647(-2^32~2^32-1)。如果超出范围怎么办,那就有“溢出”的风险,比如说4位范围的数,最大已经到了1111,如果这个时候再加1,则会变成10000了,而程序只能读4位,该数值就变成0,我们称为溢出。C语言更为关心计算机底层,所以编写C语言则需要格外小心。C语言还有long类型和long long类型,来表示更大的数值范围。在python2还有long类型,在Python3里面就没有了。我们可以更关心我们的编程逻辑而不用担心更加底层的问题

4、知道了整数的存储和计算之后我们再聊一下小数,其实不是所有小数都叫做浮点数,浮点数是一种表示数字的标准,整数也可以用浮点数的格式来存储。小数的表示方法除了浮点数还有定点数,区别就是小数点能不能“浮动”,浮点数的小数点在逻辑上是不固定的。

浮点数可以用一个表达式来表示:V = (-1)s × M × 2E

我们来逐个解释一下:

符号(sign) :1个bit表示,当s=0,V为正数;当s=1,V为负数。

阶码(exponent) :E的作用是对浮点数加权,用于存储科学计数法中的指数数据,并且采用移位存储。

尾数(significand) :M是一个二进制小数,因为是二进制,所以科学计数法中这个值范围是:1≤M<2。(和十进制中范围为1~10一样)

一般在编程语言(如C语言)中浮点类型一般是采用单精度(float)和双精度(double)来存储,float数据占用32bit,double数据占64bit。在python中是使用了双精度来存储float,没有double。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Expected tensor for argument #1 ‘input‘ to have the same device as tensor for argument #2 ‘weight‘;

这种情况出现的原因之一是创建网络的语句没有放进train函数里 比如主文件中有train&#xff08;&#xff09;&#xff0c;test&#xff08;&#xff09;&#xff0c;eval&#xff08;&#xff09;......等各个函数&#xff0c;但是创建网络的语句&#xff1a;netcreatenet()放…

单例在多线程中的使用

一次执行 dispatch_once: 对应的代码只执行一次 , 并且它是线程安全的, 系统会自动这个函数加锁,保存同一时间只有一个线程去执行任务, 实现真正意义的一次性执行 什么时候需要用到一次性执行: 单例 单例: 就是在程序运行期间,只有一个实例化对象 ---- 举例:音乐播放器的App…

找到一个或多个多重定义的符号_初中数学之相反数,总结规律,学会多重符号的化简...

今天继续和大家一起来学习初中数学&#xff0c;初一的相关知识&#xff0c;在前面已经介绍了正数和负数&#xff0c;对于有理数也有了清楚的认识&#xff0c;今天我们来学习相反数&#xff0c;相反数的概念和表示是中考命题的热点之一&#xff0c;经常结合其他知识点一起考察&a…

分类分布(categorical分布)

解释&#xff1a; 假设X有3种状态&#xff0c;分别为x_1,x_2,x_3&#xff0c;这三种状态的概率分别为0.1,0.7,0.2&#xff08;分别对应θ_1,θ_2,θ_3&#xff09; 例如现在要求x_2这种状态的概率&#xff0c;则x_10,x_21,x_30 代入公式&#xff1a; θ_1^x_1θ_1^01; θ_…

SQL Server XML转Table

前言   在SQL Server中有时候我们需要传人一个Table过去&#xff0c;然后可以在存储过程中批量更新&#xff0c;批量的获取相应数据。 但存储过程的参数是固定&#xff0c;所以这里我们可以变通的传人xml类型的参数&#xff0c;然后在存储过程中直接将其转换成我们需要的Tabl…

python处理报错_python3报错及解决方案/须注意的细节(持续更新)

问题&#xff1a;编码的问题导致。在pymysql.connect()创建连接时&#xff0c;参数charset"utf8",而非"utf-8".2、latin-1 codec cant encodecharacters编码的问题导致。数据库的编码和数据源的编码不一致&#xff0c;并且包含了不能处理的字符。出现这种报…

【人工智能】人工智能时代的道路选择 | 焦点评论

‍‍‍来源&#xff1a;产业智能官对话嘉宾朱松纯&#xff08;Song-Chun Zhu&#xff09;教授马尔奖、赫尔姆霍茨奖获得者、UCLA教授、IEEE Fellow、暗物智能科技创始人沈向洋&#xff08;Harry Shum&#xff09;博士微软全球执行副总裁、美国国家工程院外籍院士、英国皇家工程…

error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1)

leetcode179题中编译出现则个问题 出错的代码&#xff1a; class Solution { public:bool cmp1(const int& a, const int& b){string s1to_string(a);string s2to_string(b);string ans1s1.append(s2);string ans2s2.append(s1);return ans1>ans2;}string largest…

Java中间件

传统的HTML已经满足不了如今web系统的诸多的功能需求&#xff0c;建立一个交互式的Web&#xff0c;便诞生了各种Web开发语言&#xff0c;如ASP&#xff0c;JSP&#xff0c;PHP等&#xff0c;这些语言与传统的语言有着密切的联系&#xff0c;如JSP基于Java语言。 JSP是在普通的…

怎么把php查询到的值显示到下拉框中_RazorSQL for Mac(数据库工具查询) v8.5.0

RazorSQL Mac是一款专门为mac用户推出的数据库管理软件&#xff0c;允许您从一个数据库工具查询&#xff0c;更新&#xff0c;导航和管理所有主要数据库&#xff0c;RazorSQL Mac功能强大还支持SQL的编辑、数据库管理工具,支持多种数据库&#xff01;razorsql mac版使用方法Raz…

5分钟,看尽芯片和摩尔定律“你追我赶”的抗衡50年

来源&#xff1a;大数据文摘“摩尔定律过去是每5年增长10倍&#xff0c;每10年增长100倍。而如今&#xff0c;摩尔定律每年只能增长几个百分点&#xff0c;每10年可能只有2倍。因此&#xff0c;摩尔定律结束了。”今年一月份&#xff0c;英伟达(Nvidia)CEO黄仁勋在CES 2019展会…

Android Context 上下文 你必须知道的一切

今天被问到了关于Context的一些问题。发现自己关于这部分还是不是很清晰&#xff0c;然后发现洋神博客里有一篇讲的很好 很详细。我反正是看懂了&#xff0c;我觉得我再写 也不会比这个更清楚了&#xff0c;所以转过来。 http://blog.csdn.net/lmj623565791/article/details/40…

python中mysqldb模块_python中MySQLdb模块用法实例

本文实例讲述了python中MySQLdb模块用法。分享给大家供大家参考。具体用法分析如下&#xff1a;MySQLdb其实有点像php或asp中连接数据库的一个模式了&#xff0c;只是MySQLdb是针对mysql连接了接口&#xff0c;我们可以在python中连接MySQLdb来实现数据的各种操作。python连接m…

g++编译多个文件

假设现在有一个add.cpp,add.h,main.cpp这三个文件&#xff0c;文件内容如下&#xff1a; add.cpp: add.h: main.cpp: 我需要将add.cpp和main.cpp这两个文件进行编译&#xff0c;有以下两种方法&#xff1a; g -c add.cpp g -c main.cpp g main.o add.o -o test ./test 第二种…

【数字孪生】工业互联网和数字孪生

来源&#xff1a;产业智能官《崛起的超级智能》一书主要阐述当今天人类为人工智能的春天到来而兴奋&#xff0c;为人工智能是否超越人类而恐慌的时候&#xff0c;一个更为庞大、远超人类预期的智能形态正在崛起&#xff0c;种种迹象表明50年来&#xff0c;互联网正在从网状结构…

javascript数组扁平化处理

最近看jQuery源码$.map方法的实现&#xff0c;返回值利用了一个扁平化处理 return ret.concat.apply( [], ret ) 这有个疑问&#xff0c;不知道为什么不直接返回ret 根据这个返回值处理&#xff0c;推测ret可能不是一阶数组&#xff0c;例如[1,2,[3,4]]这样的; var ret [1,2,[…

k折交叉验证法python实现_Jason Brownlee专栏| 如何解决不平衡分类的k折交叉验证-不平衡分类系列教程(十)...

作者&#xff1a;Jason Brownlee编译&#xff1a;Florence Wong – AICUG本文系AICUG翻译原创&#xff0c;如需转载请联系(微信号&#xff1a;834436689)以获得授权在对不可见示例进行预测时&#xff0c;模型评估涉及使用可用的数据集来拟合模型&#xff0c;并评估其表现性能。…

linux的find命令满屏权限不够提示

用find命令是如果是普通用户通常会输出一堆“权限不够”的提示&#xff0c;这会影响到我们找出有用的信息&#xff0c;为了将这些错误忽略&#xff0c;可以采用重定向&#xff1a; find / -name add.h 2> /dev/null

AI“换脸”打开潘多拉魔盒,如何应对?

来源&#xff1a;科学网近日&#xff0c;一款名为“ZAO”的换脸APP引发舆论关注。用户上传照片&#xff0c;就可以把影视剧主角的脸替换成用户自己的脸。在过把“明星瘾”的同时&#xff0c;也让大众关注到“换脸”带来的个人信息泄露风险。信息时代&#xff0c;“脸面”不仅仅…