我已经学习了PHP,Java和C。现在我很好奇为什么会有这么多类型的数字数据类型,例如bit,int,float,double和long。为什么不只为一种数字做类型呢?
有什么好处吗?也许如果我们使用整数来保存这么小的数字,那么我们可以节省内存吗?
我已经学习了PHP,Java和C。现在我很好奇为什么会有这么多类型的数字数据类型,例如bit,int,float,double和long。为什么不只为一种数字做类型呢?
有什么好处吗?也许如果我们使用整数来保存这么小的数字,那么我们可以节省内存吗?
Answers:
为什么要考虑不同的数字数据类型有两个原因。
for(long k=0;k<=10;k++)
{
//stuff
}
为什么使用long时,它很容易成为整数,甚至是字节?这样做确实可以节省几个字节的内存。
假设我们将数字22存储在整数中。计算机将该数字以二进制形式存储在内存中,如下所示:
0000 0000 0000 0000 0000 0000 0001 0110
如果您不熟悉二进制数字系统,则可以用科学记数法表示为:2 ^ 0 * 0 + 2 ^ 1 * 1 + 2 ^ 2 * 1 + 2 ^ 3 * 0 + 2 ^ 4 * 1 + 2 ^ 5 * 0 + ... + 2 ^ 30 * 0。最后一位可能会或可能不会用来指示数字是否为负(取决于数据类型是带符号还是无符号)。
本质上,它只是2 ^(位)*值的总和。
当您引用涉及小数点的值时,这会改变。假设您用小数表示数字3.75。这在二进制文件中称为11.11。我们可以将其表示为科学记数法,表示为2 ^ 1 * 1 + 2 ^ 0 * 1 + 2 ^ -1 * 1 + 2 ^ -2 * 1或归一化为1.111 * 2 ^ 2
但是,计算机无法存储它:它没有表达该二进制点(小数点的二进制数字系统版本)的显式方法。计算机只能存储1和0。这就是浮点数据类型的来源。
假设sizeof(float)为4字节,则总共有32位。给第一位分配“符号位”。没有无符号的浮点数或双精度数。接下来的8位用作“指数”,最后的23位用作“有效数”(有时也称为尾数)。使用我们的3.75示例,我们的指数将为2 ^ 1,有效数将为1.111。
如果第一位为1,则数字为负。如果不是,则为正。指数被称为“偏见”的东西所修饰,因此我们不能简单地将“ 0000 0010”存储为指数。单精度浮点数的偏差为127,双精度浮点数(这是double数据类型的名称)的偏差为1023。最后23位保留给有效位数。有效位数只是我们二进制点右边的值。
我们的指数将是偏差(127)+指数(1)或以二进制表示
1000 0000
我们的意义是:
111 0000 0000 0000 0000 0000
因此,3.75表示为:
0100 0000 0111 0000 0000 0000 0000 0000
现在,让我们看一下表示为浮点数和整数的数字8:
0100 0001 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1000
计算机将如何添加8.0和8?甚至乘以它们!该计算机(更具体地说是x86计算机)具有CPU的不同部分,这些部分添加了浮点数和整数。
早在我们拥有千兆字节系统(或在像Arduino这样的现代嵌入式系统)上,内存非常宝贵,因此实施了速记方法来指定特定数字将占用多少内存-BIT很简单-最初只占1位的记忆。
其他数据大小和名称在系统之间有所不同。在32位系统上,INT(或MEDIUMINT)通常为2个字节,LONGINT为4个字节,SMALLINT为单个字节。64位系统可以将LONGINT设置为8字节。
即使是现在-特别是在数据库应用程序或在服务器上运行有多个实例的程序中(例如网站上的服务器端脚本),您仍应注意选择的内容。如果您的数据库表具有数百万条记录,那么挑选一个2、4或8字节宽的整数来存储0到100之间的值(可以容纳一个字节)是非常浪费的。
更多信息:https : //en.wikipedia.org/wiki/Integer_(computer_science)
也许最重要的是,实际上有三种不同的基本数字类型。
整数,固定的小数和浮点数。
它们的行为各不相同。
根据所使用的数据类型,像7/2这样的简单操作可以给出3、3.50和3.499的答案。
“固定十进制”是灰姑娘类型,仅本地支持几种语言,例如COBOL和VisualBasic。它对计算机科学家没什么兴趣,但是对于任何提交一组帐户或计算发票营业税的人来说至关重要。
int
,float
,和unsigned int
,分别。定点类型是离散类型的子类别,但是代数环与数字本质上是不同的[C中对无符号类型的困惑必须源于它们大多像环而不是数字,但不太一致的事实] 。
他们有什么好处吗?
当然。有好处。在计算机世界中,内存是最重要的考虑因素之一。当数据可以容纳小于1kb的内存时,具有2kb的内存有什么用?。优化应该在那里。如果您使用更多的内存,显然会降低您的计算机速度。你真的很喜欢吗?没有权利...?
int - 2 bytes (16 bits)
long - 4 bytes (32 bits)
long long - 8 bytes (64 bits)
float - 4 bytes
不仅记忆,而且还有数字类型的组织。用于实例浮点。精度很重要,显然我们应该选择一种可以给我们带来更高精度的类型。
如果我们考虑过去的日子,那么您可能知道的记忆力就很少。为了保存并明智地使用它,我们存在这些差异。还有更多,如果您只是继续尝试使用Google进行搜索。希望对您有所帮助。
从概念上讲,整数和实数(浮点,双精度)是不同的类型,具有不同的操作集和内在属性。
整数是可枚举的,但浮点数不是,等等。
实际上,浮点数/双数是结合两个整数字段的结构:尾数和指数。复杂数字(您已排除在外)更加复杂。
任何实用语言都应至少具有整数和浮点数作为不同的类型-它们之间的操作差异太大。
a
(实部)和b
(虚部)。尽管CPU可能对诸如(a b + c d)和(a b-c d)之类的值对执行加速的乘法加法指令,但CPU通常不会为复数运算提供本机支持。
uint16_t
持有65535,则将其递增将使其持有0)。理想情况下,语言必须干净,独立的类型代表包裹代数环和数字(允许数字溢出被困住,同时允许代码就被这东西很容易进行操作预计到套)。