1.明确:计算机中数字都是在内存中进行存储,并且这些数字都是以二进制的形式存储
2.明确:计算机软件代码中数字的表示形式(展现形式)有四种:
二进制表示,八进制表示,十进制表示,十六进制表示
注意:不管是哪种形式,都是对同一个内存中存储的数字的不同形式而已
内存中的数字不会因为表示形式不一样而发生改变
在超市(十六进制形式)
人不管在哪里,本身是不改变的!
八进制,十进制,十六进制给程序看的,好看
二进制给计算机看,计算机只认二进制
3.明确:计算机把内存中每个字节又分8段,每段只能记录0和1
要想把一个数字存储到内存中,必须将这个数字分拆成若干个0和1存储到每个段中
所以:内存中的最小存储单元是位(bit)
a)定义:用一组0和1表示数字的方法简称二进制表示形式
例如:现在又一个十进制数85(前提是char类型),要存储到内存中,必须以二进制的形式存储
所以需要将85分拆成8个0和1,最终其二进制表示形式为:(二进制形式)
1.二进制数的编号:从0开始
2.二进制数中每个1单独代表一个10进制数字,这个10进制数字值是2的编号次方
二进制数(其中第6位的1对应的10进制数字值是2的6次方 = 64)
3.二进制数中相邻的两个1,左边是右边的2倍
4.二进制数加1的时候把编号为0位置开始的多个连续的1变0,最左边的0变1(逢二进一)
5.二进制和十进制之间的转换
问:10进制数85对应的2进制凭什么是
2进制数对应的10进制数凭什么是85
5.1.明确:计算机只认二进制,内存中只能存储数字的二进制形式
至于10进制,8进制,16进制都是对内存中2进制数的另外三种表示形式
5.2.二进制表示的非负数(0和正数)转换成10进制就是把每个二进制中的1单独转换10进制然后相加
例如:前提是char类型
二进制数85(非负数)
结论:将来存储85就是讲85分拆成8个0和1即:,存储到1字节的内存空间即可
采用"除2取余,逆序排列"法:用2整除十进制整数,可以得到一个商和余数
再用2去除商,优惠得到一个商和余数,如此进行
直到商为小于1时为止,然后把先得到的余数作为二进制数的地位,
后得到的余数作为二进制数的高位,依次排列起来。
例如:前提是char类型,91这个10进制数转2进制过程:
结果二进制数为:(高位补0,凑够1字节)
结论:将91分拆成保存到1字节内存即可
5.4.负数的10进制和2进制不能直接转换,必须借助相反数(-5的相反数位5)
a)10进制的负数转2进制的步骤:
首先计算相反数,变成正数
然后将相反数转成2进制
最后取反加1得到10进制负数的2进制(取反的意思就是1变0,0变1)
b)明确:有符号类型数字(不加unsigned关键字修饰的)才能有符号
二进制数中最左边的位叫符号位,通过此位可以确定数字的符号位(正还是负,人为自己判断添加符号)
符号位的值为0表示数字为非负数(0和正数),符号位的值为1表示此数字为负数
切记:讨论符号位的前提是必须确定数据类型
例如:(前提是char类型),此数必然是正数
所以从低位开始要8位即可,最后的二进制是:,此时最高位为1,表示负数
有了这个明确,现在就可以实现二进制表示的负数转十进制
例如:求二进制数的10进制(前提是char类型,显然是负数)
3.前提是已知这个2进制数为负数,所以最后求相反数:-74
6.2进制和8进制之间的转换
a)定义:就是把2进制数从右边到左边每3位分一组
每组用一个0到7的数字替换得到8进制表示形式
注意:八进制数前面加0(零)来表示,0250(说明这个数是一个8进制数)
例如:2进制数进制是105)转8进制,三步骤:
//不管是10进制还是8进制,内存只存他们的2进制为:
重磅好消息:实际开发2进制和10进制,2进制和8进制之间的转换记得用计算器!
7.2进制和16进制之间的转换(核心中的核心)
a)16进制定义:把2进制数从右边到左边每4位分为一组
每组用一个字符替换(用a到f之间的字母替换10~15之间的数字)
注意:16进制数前面需要添加0x或者0X,不区分大小写
例如:转换为16进制,分三步:
b)切记:务必拿下2进制和16进制的转换(口算,不允许用计算器)
在程序中一般用16进制来表示2进制,16进制也就是2进制
由于内存的每个字节只能存8位,所以讲0xa596bef1这个数据分成4个字节,每个字节8位
然后将这些二进制分别存储到对应的内存中即可,从地位到高位
Q:250(数据类型为int类型)这个10进制数在内存中如何存储的?
Q:-250如何存呢?