进制
(1)就是进位制,是人们规定的一种进位方法。 对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位
(2)java语言中整数的表现形式
A:八进制
逢八进一
所能表示的数据有:0-7
用0开头表示
B:十进制
逢十进一
所能表示的数据有:0-9
C:十六进制
逢十六进一
所能表示的数据有:0-9,A-F(10-15)
用0x或者0X开头表示(3)进制的由来及特点。
A:计算机表示数据是通过电信号来完成的,而电信号只有二种状态’开‘和’关‘
B:到底用多少个开关组合来表示数据比较合理呢?国际标准委员会规定:用八个开关的组合表示一个数据单元每一个开或者关,
称之为bit(中文称之为"位")8个开关的组合就做为一个数据单元存在.用byte(字节)来表示.字节:
1Byte=8Bit1KB=1024 Byte
1MB=1024KB
1GB=1024MB
1TB=1024GB
C:但是电信号来表示数据比较麻烦,不利于计算机进行运算,所以出现了数字信号。我们就用数字0和1来表示电信号的开和关,这就是
二进制的由来。
D:我们发现二进制的数据表示起来比较麻烦,这个时候我们把二进制数据的每三位组合在一起,然后把组合以后的数据计算成对应的十
进制数字。再把计算出来的数据组合一下。这就形成了8进制。
E:继续发现,用八进制表示还是比较麻烦,这个时候我们就把二进制数据的每四位组合在一起然后把组合以后的数据转化成对应的10进制数
再相连接就行为这个二进制数对应的十六进制数。
F:不同的进制表示数据的形式,进制越大,表现形式越短.**练习:二进制转八和十六进制
(末位看齐,左边不够补0)
二进制转八进制: 每3位一看. ----(421)?7
如: 1100010101 从末位3位一看。
001 =1 100=4 010=2 101=5
得到八进制结果是:1425.
二进制转十六进制: 每4位一看. -----(8421)?15
如: 1100010101 从末位4位一看。
0011 =3 0001=1 0101=5
得到进制结果是315.(4)进制转换
A:其他到十进制的转换
其他进制包含二进制,八进制,十六进制
B:我们通过十进制找规律,例如:12345= 1*1000+ 2*1000+3*100+ 4*10+ 5*1
任何数的0次幂都是1)
C:转换规则
系数:一个数据的每一位上的数字就是该位的系数。
基数:x进制的基数就是X
权 :从一个数据的右边开始编号,从0开始到末尾,我们把对应位上的编号称之为改位的权。
---->先把数据的每一位上的系数乘以对应基数的权次幂,然后相加即可***练习:1101,046,F4
举例:
二, 八, 十六进制转十进制
乘法, 将要转的数编号, 编号从低位开始, 从0开始. 用要转的数的每一位乘以进制的编号次方, 再相加.二进制转十进制
11001001编号: 76543210
1*2~7 + 1*2~6 + 1*2~3 + 1*2~0=201 (2~7表示2的7次幂)
八进制转十进制
123240编号:543210
1*8~5 + 2*8~4 + 3*8~3 + 2*8~2 +4*8~1=42656
十六进制转十进制
CA351编号:43210
12*16~4 + 10*16~3 + 3*16~2 + 5*16~1 + 1*16~0
(5)十进制到其他进制的转换
规则:除基取余,直到商为0,最后将余数反转**十进制到二进制
***除2取余,直到商为0,最后将余数反转
***练习:十进制13对应的二进制数据是1101
***二进制到十进制的技巧(8421码)
**十进制到八进制
***除8取余,直到商为0,最后将余数反转
***练习:十进制13对应的八进制数据是15
***十进制-->二进制-->八进制
****首先把十进制转成二进制
****其次把二进制数据每三位组合。左边不够三位用0补位
****然后把每个组合计算成对应的十进制数据
****最后从左到右把数据相连接即可得到八进制
**十进制到十六进制
***除16取余,直到商为0,最后将余数反转
***十进制13对应的把进制数据是D
***十进制-->二进制-->十六进制
****首先把十进制转成二进制
****其次把二进制数据每四位组合。左边不够四位用0补位
****然后把每个组合计算成对应的十进制数据
****最后从左到右把数据相连接即可得到十六进制
3:有符号数据的表示形式 (byte型)
(1)原码
A:所谓原码就是二进制数的有符号表示法,即最高位为符号位,"0"表示正,
"1"表示负,其余位表示数值的大小
**举例
***+7 0 0000111
***-7 1 0000111
(2)反码
A:正数的反码和原码相同
**举例
***+7 0 0000111
B:负数的反码是符号位不变,数值为按位取反,就是0变1,1变0
**举例
***-7 1 1111000
(3)补码
A:正数的补码和原码相同
**举例
***+7 0 0000111
B:负数的补码是符号位不变,数值为按位取反,就是0变1,1变0,最后在加1
**负数的补码其实就是反码加1
**举例
***-7 1 1111001
int型负数的推算过程。将要计算的数求二进制, 取反, 再加一. 原码, 反码, 补码
负数的二进制表现形式,如 :
6=110
-6 :其实就是6的二进制取反+1
取反:将二进制的1变成0,变成1.
6的二进制占有4个字节,表现如下.
0000-0000 0000-0000 0000-0000 0000-0110 原码
取反 1111-1111 1111-1111 1111-1111 1111-1001 补码
-6的表示是补码+1
1111-1111 1111-1111 1111-1111 1111-1001 补码
+ 0000-0000 0000-0000 0000-0000 0000-0001 加一
------------------------------------------------------------
1111-1111 1111-1111 1111-1111 1111-1010 =-6
负数的最高位都是1,
码表
1.ASCII: 只包含英文, 每个占1字节
/*public class Jinzhi { // 十进制转十六进制.将数字除16取余数,直到余数为0,如果余数大于9小于16转成A到F的char类型。 // 取得的余数装入容器再进行反转操作,随后打印。 public static void main(String[] args) { StringBuffer sb = new StringBuffer();// 创建一个容器,用来储存元素. int x = 198;// 定义一个整型变量.并赋值是198, while (x > 0) {// 定义循环,如果x>0就执行{}中的句子. int y = x % 16;// 定义一个变量y让并赋值是x除以16得到的余数。 if (y < 10) {// 如果y<10时就运行 {}中的句子. sb.append(y);// 将y添加到 sb这个容器中 } else {// 对应 if 如果if不成立那么就执行下边{}中的句子、 sb.append((char) (y - 10 + 'A')); // 将余数转化为16进制,"余数-10"得到大于10的部分,大于多少就把'A'加上多少,再把自动类型提升的值强转回char. } x = x / 16;// 对x变量进行重新赋值,将X除以2,直到x=<0 就是条件x>0不满足时,不再执行方法 } sb.reverse();// 将 容器sb内的元素,进行反转操作 System.out.println(sb);// 打印出结果. } }*/ //这个最简单..... public class Jinzhi { public static void main(String args[]) { System.out.println(Integer.toBinaryString(98));// 输出语句:98的2进制表现形式. } }
进制
最新推荐文章于 2024-09-14 18:46:05 发布