-
Java编程语言学习04-二进制与进制间转换/原码/反码/补码
进制概念
什么是进制
进制:就是进位制,是人们规定的一种进位方法
对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位
二进制就是逢二进一 0/1
八进制是逢八进一
十进制是逢十进一
十六进制是逢十六进一
十进制的由来
十进制的由来是因为人类有十个手指
二进制的由来
其实二进制来源于中国,18世纪德国数理哲学大师莱布尼兹从他的传教士朋友鲍威特寄给他的拉丁文译本《易经》中,读到了八卦的组成结构,惊奇地发现0和1分别为表示数字原点的特殊数和基本数.莱布尼兹也是第一个认识到二进制记数法重要性的人,并系统地提出了二进制数的运算法则。二进制对200多年后计算机的发展产生了深远的影响。他于1716年发表了《论中国的哲学》一文,专门讨论八卦与二进制,指出二进制与八卦有共同之处。
其进位制就是二进制,并认为这是世界上数学进制中最先进的,20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,其运算模式正是二进制
八进制的由来
任何数据在计算机中都是以二进制的形式存在的。
二进制早期由电信号开关演变而来。一个整数在内存中一样也是二进制的
但是使用一大串的1或者0组成的数值进行使用很麻烦
所以就想把一大串缩短点,将二进制中的三位用一位表示
这三位可以取到的最大值就是7.超过7就进位了,这就是八进制。
十六进制的由来
对于过长的二进制变成八进制还是较长,所以出现的用4个二进制位表示一位的情况
四个二进制位最大是15,这就是十六进制
0...9 A B C D E F
进制的表现形式
二进制: 由0,1组成。以0b(b可以大写也可以小写)开头,0b010101
八进制: 由0,1,…7组成。以数字“0”开头
十进制: 由0,1,…9组成。整数默认是十进制的
十六进制: 由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
进制之间转换
十进制转二进制:
十进制数字6转成二进制:
第1行先列出一个式子,内容为2的1次方,2的2次方 依次下去
把数字6进行拆分 4 + 2 与第1行当中对比,用到的数字标记成1,没有用到数字标记成为0, 然后从右向左取值得到结果:00000000110,前面的0可以省略,得到结果为:110,所有6的二进制为110
十进制数字13转成二进制:
转换的方式与上面的方式一样, 把13拆分为: 8 + 4 + 1,没有用到数字标记成为0, 然后从右向左取值得到结果: 0000001101,前面的0可以省略,得到结果为:1101
当然除了以上方式进行转换外还有除以基数倒取余的写法
上图中29转成二进制为11101
二进制转十进制:
传统十进制的方式:
二进制转十进制:
当然也可以使用最上面的表,反着操作!
二进制转八进制,三位划成一组. 二进制转十六进制,四们划成一组.
八进制与16进制先转二进制, 再进行其它进制之间的转换
位
位:"位(bit)"是电子计算机中最小的数据单位。每一位的状态只能是0或1。
字节:
字节:8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位
KB:
在一般的计量单位中,通常K表示1000,但是在计算机当中的K表示1024,也就是2的10次 方。1KB表示1K个Byte,也就是1024个字节.
1MB=1024KB
1GB = 1024MB
1T = 1024G
原码/反码/补码
人脑可以知道第一位是符号位,可以根据符号位对真值得绝对值进行加减乘除
但是对于计算机来说,加减乘除是最基本的运算,要设计得尽量简单
计算机辨别符号位会让计算机的设计电路变得很复杂
于是人们想出了让符号位也参与到运算上来。减去一个数,等于加上他的负数
0就代表正数,1代表负数 第1位为符号位
正数
假设机器字长(处理的位数为8位)
数字:1 原码,反码,补码
原码:00000001
反码:00000001
补码:00000001
负数:
数字:-1 原码,反码,补码
原码:符号位为1其余各位不变 10000001
反码:符号位不变,其余各位取反 1 1 1 1 1 1 1 0
补码:符号位不变,其位各位取反后加11 1 1 1 1 1 1 1
对补码取返加1 得到原码
原文:https://www.cnblogs.com/myxq666/p/14711484.html