存储超大数字
‘壹’ c#怎么储存更大的数字 double和long储存的数字范围的确很广,但总有上限,比如我计算√2
据我所知C#最精确的类型是decimal,最多精确28位有效数据,按你的要求,只能手动实现高精度,而且精确到几百亿即使银河那个级别的大型机也要跑到人类毁灭,而且在大型机上是不会使用C#的。
以下内容摘自《C#语言规范5.0》的4.1.7章
decimal 类型
decimal类型是 128 位的数据类型,适合用于财务计算和货币计算。decimal类型可以表示具有 28 或 29 个有效数字、从 1.0 × 10−28到大约 7.9 × 1028 范围内的值。
decimal类型的有限值集的形式为 s × c × 10-e,其中符号 s是 0 或 1,系数c由 0 ≤ c < c < 296 给定,小数位数 e满足 0 ≤ e ≤ 28。decimal类型不支持有符号的零、无穷大或 NaN。decimal可用一个以 10 的幂表示的 96 位整数来表示。对于绝对值小于 1.0m的 decimal,它的值最多精确到第 28位小数。对于绝对值大于或等于 1.0m的 decimal,它的值精确到小数点后第28 或 29 位。与 float和 double数据类型相反,十进制小数数字(如 0.1)可以精确地用 decimal表示形式来表示。在 float和 double表示形式中,这类数字通常变成无限小数,使这些表示形式更容易发生舍入错误。
如果二元运算符的一个操作数为 decimal类型,则另一个操作数必须为整型或 decimal类型。如果存在一个整型操作数,它将在执行运算前转换为 decimal。
decimal类型值的运算结果是这样得出的:先计算一个精确结果(按每个运算符的定义保留小数位数),然后舍入以适合表示形式。结果舍入到最接近的可表示值,当结果同样地接近于两个可表示值时,舍入到最小有效位数位置中为偶数的值(这称为“银行家舍入法”)。零结果总是包含符号 0 和小数位数 0。
如果十进制算术运算产生一个绝对值小于或等于 5 × 10-29 的值,则运算结果变为零。如果 decimal算术运算生成的结果对于 decimal格式来说太大,则将引发 System.OverflowException。
与浮点型相比,decimal类型具有较高的精度,但取值范围较小。因此,从浮点型到 decimal的转换可能会产生溢出异常,而从 decimal到浮点型的转换则可能导致精度损失。由于这些原因,在浮点型和 decimal之间不存在隐式转换,如果没有显式地标出强制转换,就不可能在同一表达式中同时使用浮点操作数和 decimal操作数。
‘贰’ int类型能够存储的最大数值是多少2进制
int类型能存储的最大数值是2^32
int类型在内存中占4个字节,也就是用32位二进制表示。其中最高位为符号位,0表示正,1表示负。
int类型正数上限二进制表示为0111 1111 1111 1111即(2^32)-1,表示0的符号位是0(即最高位是0):0000 0000 0000 0000
由于0已经被正数这一边表示了,所以负数的1000 0000 0000 0000就可以用来表示-2^32
‘叁’ c语言中怎么存储一个很大很大的数
C语言的系统类型,均有大小的限制。超出这个存储范围,就无法用该类型进行存储。所以需要根据数据规模,来选择存储类型。
当需要存储的数很大很大,超出所有可以类型可以表示的范围时,比如一个100位的10进制数,就需要用字符串的方式进行存储。这种存储方式,在算法中称为大数存储,对这种大数的计算,称为大数计算。
(3)存储超大数字扩展阅读:
顺序结构:
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序。
写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构。
例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。
‘肆’ 一个字节可以存储多大的数字
一个字节有8位,每一位两种状态1或者0
计算机储存数据是以二进制的方式,有一位为符号位,所以最大数为01111111转化为十进制数为127。
若无符号,最大数为11111111转化为十进制为255。
二进制,是计算技术中广泛采用的一种数制,由德国数理哲学大师莱布尼茨于1679年发明。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。
当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
(4)存储超大数字扩展阅读:
与十进制
1,二进制转十进制
方法:“按权展开求和”。
2,十进制整数转二进制数:“除以2取余,逆序排列”(除二取余法)
3,十进制负数转二进制:“先取正数的二进制值,再取反,加1”。
与八进制
二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。
八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数。
与十六进制
二进制数转换成十六进制数:二进制数转换成十六进制数时,只要从小数点位置开始,向左或向右每四位二进制划分一组(不足四位数可补0),然后写出每一组二进制数所对应的十六进制数码即可。
十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。
参考资料来源:网络-二进制
‘伍’ 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算
在C/C++里面已经有了这种数据结构 LONGLONG java里面则用BigInteger来表示任意长得整数
‘陆’ 一个字节可以存储多大的数字
一个字节有8个位,每个位有2种状态
1和0
于是呢
如果将首位作为符号位
即1为负数
0为整数
则
一字节存的最小数为
11111111(-128)
最大数为
01111111(127)
如果没有符号位则
最小数为00000000(十进制0)
最大数为11111111(十进制255)
‘柒’ 如何用C++做到存储一个超大数字
可以用unsigned __int64或unsigned long long int类型存储。
用string你怎么实现200!的计算过程?