在
计算机科学中, int()函数是整数数据类型的
数据 ,是表示某种数学
整数 范围的
数据类型 。 积分数据类型可以具有不同的大小,并且可以允许或不允许包含负值。 整数通常在计算机中表示为一组
二进制数字(位)。 分组的大小各不相同,因此可用的整数大小集在不同类型的计算机之间有所不同。 计算机硬件(包括
虚拟机 )几乎总是提供一种将处理器
寄存器或存储器地址表示为整数的方法。
价值和代表
具有整数类型的项的值是它对应的数学整数。积分类型可以是无符号的(只能表示非负整数)或有符号(也能表示负整数)。
整数值通常在程序的
源代码中指定为可选的前缀为+或 - 的数字序列。一些编程语言允许其他符号,例如十六进制或八进制。一些编程语言也允许数字组分隔符。
此数据的内部表示形式是值存储在
计算机内存中的方式。与数学整数不同,计算机中的典型数据具有一些最小和最大可能值。
正整数的最常见表示是使用
二进制数字系统的一串
位。存储位的存储器
字节的顺序是变化的;看到
字节序。整数类型的宽度或精度是其表示中的位数。具有n位的整数类型可以编码2数字;例如,无符号类型通常表示非负值0到2-1。有时使用对位模式的整数值的其他编码,例如
二进制编码的十进制或
格雷码,或者诸如ASCII的打印字符码。
在二进制计算系统中有四种众所周知的方式来表示有符号数。最常见的是
二进制补码,它允许带有n位的有符号整数类型表示从-2到2-1的数字。二进制补码算法很方便,因为表示和值之间存在完美的一对一对应关系(特别是没有单独的+0和-0),并且因为
加法,
减法和
乘法不需要区分有符号和无符号类型。其他可能性包括偏移二进制,符号幅度和1'补码。
一些计算机语言以与机器无关的方式定义整数大小;其他人根据底层处理器字大小有不同的定义。并非所有语言实现都定义所有整数大小的变量,并且在特定实现中定义的大小甚至可能不是不同的。一种编程语言中的整数可以是不同语言或不同处理器上的不同大小。
类型
不同的
CPU支持不同的整数数据类型。通常,硬件将支持有符号和无符号类型,但只支持一小组固定宽度。
上表列出了常见处理器在硬件中支持的整体类型宽度。高级编程语言提供了更多可能性。通常有一个“双宽度”整数类型,其位数是最大硬件支持类型的两倍。许多语言也有位字段类型(指定的位数,通常限制为小于最大硬件支持的宽度)和范围类型(只能表示指定范围内的整数)。
一些语言,如
Lisp,
Smalltalk,
REXX,
Haskell,
Python和Perl 6支持任意精度整数(也称为无限精度整数或bignums)。其他不支持此概念作为顶级构造的语言可能有可用于使用较小变量数组表示非常大的数字的库,例如Java的BigInteger类或Perl 5的“bigint”包。它们使用尽可能多的计算机内存来存储数字;但是,计算机只有有限的存储量,因此它们也只能表示数学整数的有限子集。这些方案支持非常大的数字,例如,一千字节的内存可用于存储长达2466个十进制数字的数字。
布尔或
标志类型是一种只能表示两个值的类型:0和1,通常分别用false和true标识。这种类型可以使用单个位存储在存储器中,但为了方便寻址和访问速度,通常给出一个完整的字节。
四位数被称为
半字节(当吃东西时,小于咬一口)或者nybble(在字节字节的形式上是双关语)。一个半字节对应于十六进制中的一个数字,并且以二进制编码的十进制数保存一个数字或符号代码。
字节和八位字节
术语字节最初意味着'最小的可寻址存储单元'。过去,全部使用了5,6,7,8和9位字节。还有一些计算机可以处理单个位(“位寻址机器”),或者只能处理16位或32位数量(“字寻址机器”)。通常不使用术语字节与位和字寻址机器相关联。
术语八位字节总是指8位数量。它主要用于
计算机网络领域,其中具有不同字节宽度的计算机可能必须进行通信。
在现代使用中,字节几乎总是意味着8位,因为所有其他尺寸都已被废弃;因此字节已成为八位字节的同义词。
Word
术语“字”用于由特定体系结构的处理器同时处理的一小组位。因此,字的大小是CPU特定的。已经使用了许多不同的字大小,包括6,8,14,16,18,24,32,36,39,40,48,60和64位。由于它是体系结构的,因此字的大小通常由系列中的第一个CPU设置,而不是后来兼容的CPU的特性。从单词派生的术语的含义,例如长字,双字,四字和半字,也随CPU和OS而变化。
实际上所有新的桌面处理器都能够使用64位字,尽管8位和16位字大小的
嵌入式处理器仍然很常见。36位字长在计算机早期很常见。
软件不可移植性的一个重要原因是错误地假设所有计算机具有与程序员使用的计算机相同的字大小。例如,如果使用C语言的程序员错误地将int用于存储大于2-1的值的变量声明为int,则程序将在具有16位整数的计算机上失败。该变量应该被声明为long,在任何计算机上至少有32位。程序员也可能错误地认为指针可以转换为整数而不会丢失信息,这可能适用于(某些)32位计算机,但在具有64位指针和32位整数的64位计算机上会失败。
short
与同一台机器上的标准整数相比,短整数可以表示可能占用较少存储空间的整数,而具有较小的范围。
在C中,用short表示。它必须至少为16位,并且通常小于标准整数,但这不是必需的。 在Java中,short总是一个16位整数。在Windows API中,数据类型SHORT在所有计算机上定义为16位有符号整数。
Long
长整数可以表示整数,其
整数范围大于或等于同一台机器上标准整数的整数。
在C中,它表示为long。它必须至少为32位,并且可以或可以不大于标准整数。
在C编程语言的
C99版本和C ++的C ++ 11版本中,支持long long类型,它具有标准long的最小容量的两倍。要求C代码符合以前的C ++标准C ++ 03的编译器不支持这种类型,因为C ++ 03中不存在long long类型。对于符合ANSI / ISO标准的编译器,指定范围的最低要求,即 - (2-1)至2-1(有符号)和0至2-1(无符号),必须得到满足;但是,允许扩展此范围。在平台之间交换代码和数据或进行直接硬件访问时,这可能是一个问题。因此,有几组标题提供与平台无关的精确宽度类型。C标准库提供了
stdint.h;这是在C99和C ++ 11中引入的。