论文部分内容阅读
摘 要:本文提出了超级进制数的概念、表示方法、基本运算和应用。超级进制数概念的提出是对于整数论的一个重要补充,是整数论与计算机应用相结合所产生的结果,相信会成为整数论的一个重要发展分支。
关键词:超级进制数;概念;表示;基本运算
一、定义
广义定义:C进制,是任意大于等于2的正整数进制的进制集合。换句话说,2进制数、3进制数、4进制数等等任意进制数的集合,统称为C进制数。
二、C进制数的元素
众所周知,10进制数由0-9共10个数字组成,所以我们说10进制数共有10个元素,即0-9这10个数字。2进制数只有两个元素0和1。而16进制数有16个元素,即0-9这10个数字加上A-F这6个字符。
在C进制数中,对于256进制数来说,它一共有256个元素。我们知道,计算机的ASCII码共有256个字符(含基本和扩展,下同),我们刚好就用这256个字符作为256进制数的元素。对于更大进制数来说,我们可以定义一个数组,用数组的元素来对应C进制数的元素。
三、C进制数的表示
我们先想想平常熟悉的几种进制数的情况,一个数是由若干个元素排列而成的,例如10进制数的“25648723647”,2进制数的“101110010”,16进制数的“45F1AC4B”等。我们从右到左依次称为第一位数,第二位数,第三位数等等(类似10进制中的个位数,十位数,百位数等等)。元素都是用显而易见的符号(数字和字母)表示。
为此,这里提出了C进制数的一般表示法。
1.C进制数的10进制表示法
格式:Cn(10进制数字串)
说明:Cn为超级进制数标记符,整数n为进位基数,每个元素用一个小于n的10进制数表示,元素之间用下划线或逗号作为分隔符隔开。元素按低位到高位从右到左排列。如果省略进位基数,默认为是256进制。10进制及其以下的进制数也可以省略分隔符。特别地,10进制数可以省略进制标记、括号和分隔符,直接用数字串表示(就是我们平常用的10进制表示形式)。
例如:C256(240,10,154,89)表示一个256进制数,C86(55_60_6_84)表示一个86进制数,C10(8490)表示一个10进制数,C16(12,6,14,10)表示一个16进制数,C2(1001101)表示一个2进制数等。
优点:直观,含义明确。
2.C进制数的16进制表示法
格式:Cn(16进制数字串)
说明:Cn为超级进制数标记符,整数n为进位基数,每个元素用一个至少2位的16进制数表示,元素之间用下划线或逗号作为分隔符隔开。元素按低位到高位从右到左排列。如果省略进位基数,默认为是256进制。对于256及其以下进制也可省略分隔符。
例如:C256(3F_0A_24_1B)表示一个256进制数,C184(1B,02,A2,8E)表示一个184进制数,C(251A00E496)表示一个256进制数。
优点:格式整齐紧凑
缺点:直观性较差
3.C进制的字符串表示法(仅限于256及以下进制)
格式:Cn(“字符串”)
说明:Cn为超级进制数标记符,整数n为进位基数,字符串用双引号括住。字符串中每个字符代表一个C进制数的元素,元素的值就是这个字符的内码(ASCII码)。元素按低位到高位从左到右排列。如果省略进位基数,默认为是256进制。由于有相当部分ASCII字符不可显示或难以辨认,故此表示法主要用于计算机内部的计算和存储。实际上,任何字符串都可以看作是一个256进制数。
例如:C256(“4K7p”)表示一个256进制数,C86(“0b2W”)表示一个86进制数,C(“我爱中国”)表示一个256进制数。
优点:表达方式简洁,占用存储资源少,易于计算机处理。
缺点:不直观。如果字符串中含有不可显示的字符或难以辨认的字符将无法用肉眼读取。
四、C进制中各个进制之间的换算
各个进制之间的换算,参阅现有的各种资料,通常用10进制为中介进行换算。例如,将一个数由A进制转换为B进制,一般是先由A进制转换为10进制,再由10进制转换为B进制。
对于一个基数为n的C进制数:
Cn(ai,...,a2,a1,a0) (其中a0-ai为10进制数)
化为10进制数为:ai×n i +...+ a2×n 2 + a1×n 1 + a0×n 0
例1:将256进制数C(“我爱中国”)化为10进制数。
“我爱中国”包括8个ASCII码(一个汉字由2个ASCII码构成),依次是206,210,176,174,214,208,185,250。
则256进制数C(“我爱中国”)的10进制表示法为C(250,185,208,214,174,176,210,206),再化为10进制数为:
250×256 7 +185×256 6 +208×256 5 + 214×256 4 +174×256 3 +176×256 2 +210×256 1 +206×256 0 = 18066701000645857998
即C(“我爱中国”) = 18066701000645857998
反过来,要将一个10进制数x化为一个n进制数,可用连续除以n取余的方法求得。
也就是说,将x除以n,得到商y0和余数p0, 将y0除以n,得到商y1和余数p1,一直除下去,除到最后得到的余数为pi,那么得到的n进制数为:
x = Cn(pi,…,p1,p0) 将一个数M由a进制直接转换为b进制(a≤4294967296,b≤4294967296)的方法是:
(1)定义一个数组Ary()
(2)将b这个数化为a进制表示的数c
(3)将M除以c,得到商y0和余数p0,再将p0化为10进制数表示为q0; 将y0除以c,得到商y1和余数p1,再将p1化为10进制数表示为q1,一直除下去,除到最后得到的余数为pi,再将pi化为10进制数表示为qi;将q0,q1,…,qi依次存入数组Ary,最后得到的数组是Ary(q0,q1,…,qi)。显而易见,数组各元素的值与C进制数的10进制表示法相对应。由此,得到M的b进制数为:
Mb = Cb(qi,…,q1,q0)
此方法已经通过编程语言实现。
五、C进制数的基本运算
只有在相同进位基数的数之间才能直接进行C进制数的运算。
1.C进制数的加减法
对于10进制数的加减法,小学生都知道“满10进1,退1当10”。同理,对于任意n进制数的加减法,只要记住“满n进1,退1当n”就容易做了。回想一下,中学时代学过的度分秒的加减法,就更容易理解了。
例2:计算C(12,220,80)+C(201,54,190) (注意是256进制数)
C(12,220,80)
+C(201,54,190)
_____________________
C(214,19,14)
例3:计算C210(1, 0,80) - C210(54,190) (注意是210进制数)
C210(1,0,80)
- C210(4,190)
_____________________
C210(205,100)
六、C进制数的应用
1.用于对巨大整数的精确处理。有了超级进制数,就可以精确处理巨大整数了,几百位、几千位的整数运算是很平常的了。理论上可以精确处理任意大的整数。
2.在密码学中的应用。现代密码学中,按密钥体系分类,可分为单密钥体系和双密钥体系。在双密钥体系中,主要的算法都是基于大整数运算的。例如,RSA算法就是基于大素数的相关运算的。超级进制数擅长于对巨大整数的处理,运用在密码学中,将便于加密和解密运算,有望推动密码学的深入发展。
七、展望
超级进制数概念的提出是对于整数论的一个重要补充,是整数论与计算机应用相结合所产生的结果,相信会成为整数论的一个重要发展分支。随着对超级进制数的进一步研究,将会发现它的更多的价值和更广的应用领域。
关键词:超级进制数;概念;表示;基本运算
一、定义
广义定义:C进制,是任意大于等于2的正整数进制的进制集合。换句话说,2进制数、3进制数、4进制数等等任意进制数的集合,统称为C进制数。
二、C进制数的元素
众所周知,10进制数由0-9共10个数字组成,所以我们说10进制数共有10个元素,即0-9这10个数字。2进制数只有两个元素0和1。而16进制数有16个元素,即0-9这10个数字加上A-F这6个字符。
在C进制数中,对于256进制数来说,它一共有256个元素。我们知道,计算机的ASCII码共有256个字符(含基本和扩展,下同),我们刚好就用这256个字符作为256进制数的元素。对于更大进制数来说,我们可以定义一个数组,用数组的元素来对应C进制数的元素。
三、C进制数的表示
我们先想想平常熟悉的几种进制数的情况,一个数是由若干个元素排列而成的,例如10进制数的“25648723647”,2进制数的“101110010”,16进制数的“45F1AC4B”等。我们从右到左依次称为第一位数,第二位数,第三位数等等(类似10进制中的个位数,十位数,百位数等等)。元素都是用显而易见的符号(数字和字母)表示。
为此,这里提出了C进制数的一般表示法。
1.C进制数的10进制表示法
格式:Cn(10进制数字串)
说明:Cn为超级进制数标记符,整数n为进位基数,每个元素用一个小于n的10进制数表示,元素之间用下划线或逗号作为分隔符隔开。元素按低位到高位从右到左排列。如果省略进位基数,默认为是256进制。10进制及其以下的进制数也可以省略分隔符。特别地,10进制数可以省略进制标记、括号和分隔符,直接用数字串表示(就是我们平常用的10进制表示形式)。
例如:C256(240,10,154,89)表示一个256进制数,C86(55_60_6_84)表示一个86进制数,C10(8490)表示一个10进制数,C16(12,6,14,10)表示一个16进制数,C2(1001101)表示一个2进制数等。
优点:直观,含义明确。
2.C进制数的16进制表示法
格式:Cn(16进制数字串)
说明:Cn为超级进制数标记符,整数n为进位基数,每个元素用一个至少2位的16进制数表示,元素之间用下划线或逗号作为分隔符隔开。元素按低位到高位从右到左排列。如果省略进位基数,默认为是256进制。对于256及其以下进制也可省略分隔符。
例如:C256(3F_0A_24_1B)表示一个256进制数,C184(1B,02,A2,8E)表示一个184进制数,C(251A00E496)表示一个256进制数。
优点:格式整齐紧凑
缺点:直观性较差
3.C进制的字符串表示法(仅限于256及以下进制)
格式:Cn(“字符串”)
说明:Cn为超级进制数标记符,整数n为进位基数,字符串用双引号括住。字符串中每个字符代表一个C进制数的元素,元素的值就是这个字符的内码(ASCII码)。元素按低位到高位从左到右排列。如果省略进位基数,默认为是256进制。由于有相当部分ASCII字符不可显示或难以辨认,故此表示法主要用于计算机内部的计算和存储。实际上,任何字符串都可以看作是一个256进制数。
例如:C256(“4K7p”)表示一个256进制数,C86(“0b2W”)表示一个86进制数,C(“我爱中国”)表示一个256进制数。
优点:表达方式简洁,占用存储资源少,易于计算机处理。
缺点:不直观。如果字符串中含有不可显示的字符或难以辨认的字符将无法用肉眼读取。
四、C进制中各个进制之间的换算
各个进制之间的换算,参阅现有的各种资料,通常用10进制为中介进行换算。例如,将一个数由A进制转换为B进制,一般是先由A进制转换为10进制,再由10进制转换为B进制。
对于一个基数为n的C进制数:
Cn(ai,...,a2,a1,a0) (其中a0-ai为10进制数)
化为10进制数为:ai×n i +...+ a2×n 2 + a1×n 1 + a0×n 0
例1:将256进制数C(“我爱中国”)化为10进制数。
“我爱中国”包括8个ASCII码(一个汉字由2个ASCII码构成),依次是206,210,176,174,214,208,185,250。
则256进制数C(“我爱中国”)的10进制表示法为C(250,185,208,214,174,176,210,206),再化为10进制数为:
250×256 7 +185×256 6 +208×256 5 + 214×256 4 +174×256 3 +176×256 2 +210×256 1 +206×256 0 = 18066701000645857998
即C(“我爱中国”) = 18066701000645857998
反过来,要将一个10进制数x化为一个n进制数,可用连续除以n取余的方法求得。
也就是说,将x除以n,得到商y0和余数p0, 将y0除以n,得到商y1和余数p1,一直除下去,除到最后得到的余数为pi,那么得到的n进制数为:
x = Cn(pi,…,p1,p0) 将一个数M由a进制直接转换为b进制(a≤4294967296,b≤4294967296)的方法是:
(1)定义一个数组Ary()
(2)将b这个数化为a进制表示的数c
(3)将M除以c,得到商y0和余数p0,再将p0化为10进制数表示为q0; 将y0除以c,得到商y1和余数p1,再将p1化为10进制数表示为q1,一直除下去,除到最后得到的余数为pi,再将pi化为10进制数表示为qi;将q0,q1,…,qi依次存入数组Ary,最后得到的数组是Ary(q0,q1,…,qi)。显而易见,数组各元素的值与C进制数的10进制表示法相对应。由此,得到M的b进制数为:
Mb = Cb(qi,…,q1,q0)
此方法已经通过编程语言实现。
五、C进制数的基本运算
只有在相同进位基数的数之间才能直接进行C进制数的运算。
1.C进制数的加减法
对于10进制数的加减法,小学生都知道“满10进1,退1当10”。同理,对于任意n进制数的加减法,只要记住“满n进1,退1当n”就容易做了。回想一下,中学时代学过的度分秒的加减法,就更容易理解了。
例2:计算C(12,220,80)+C(201,54,190) (注意是256进制数)
C(12,220,80)
+C(201,54,190)
_____________________
C(214,19,14)
例3:计算C210(1, 0,80) - C210(54,190) (注意是210进制数)
C210(1,0,80)
- C210(4,190)
_____________________
C210(205,100)
六、C进制数的应用
1.用于对巨大整数的精确处理。有了超级进制数,就可以精确处理巨大整数了,几百位、几千位的整数运算是很平常的了。理论上可以精确处理任意大的整数。
2.在密码学中的应用。现代密码学中,按密钥体系分类,可分为单密钥体系和双密钥体系。在双密钥体系中,主要的算法都是基于大整数运算的。例如,RSA算法就是基于大素数的相关运算的。超级进制数擅长于对巨大整数的处理,运用在密码学中,将便于加密和解密运算,有望推动密码学的深入发展。
七、展望
超级进制数概念的提出是对于整数论的一个重要补充,是整数论与计算机应用相结合所产生的结果,相信会成为整数论的一个重要发展分支。随着对超级进制数的进一步研究,将会发现它的更多的价值和更广的应用领域。