数据类型的“范围”是什么意思,例如整数?
答案 0 :(得分:7)
data type是一个抽象,应用于一块内存,将该段内存视为可以表示值的区域。
例如,单个字节由8位内存组成。在下图中,每个位由下划线(_
)表示:
byte: _ _ _ _ _ _ _ _ <- 8 bits
由于我们有8个位置,我们可以输入0
或1
(因为每个存储位只能设置为on
或off
状态 - 因此binary),因此我们可以使用2^8
或256个不同值的组合,我们可以从8位表示。
这是范围的概念发挥作用 - 我们如何将这256个值组合分配到可用范围?
一种方法是将256种组合中的第一种作为0
,将最终组合作为255
:
byte: 0 0 0 0 0 0 0 0 <- Represents a "0"
byte: 0 0 0 0 0 0 0 1 <- Represents a "1"
.. so on ..
byte: 1 1 1 1 1 1 1 0 <- Represents a "254"
byte: 1 1 1 1 1 1 1 1 <- Represents a "255"
对于此数据类型,范围从0
到255
。此类型通常称为unsigned byte
,因为它可以表示的值为unsigned
,因为它没有任何符号。基本上,它被处理就好像它都是正数。
另一方面,由于我们有256种组合,如果我们将其中一半分配为正数而另一半是负数呢?因此,我们为字节表示分配正值或负值:
byte: 0 1 1 1 1 1 1 1 <- Represents a "127"
byte: 0 1 1 1 1 1 1 0 <- Represents a "126"
.. so on ..
byte: 0 0 0 0 0 0 0 1 <- Represents a "0"
byte: 0 0 0 0 0 0 0 0 <- Represents a "0"
byte: 1 1 1 1 1 1 1 1 <- Represents a "-1"
.. so on ..
byte: 1 0 0 0 0 0 0 1 <- Represents a "-127"
byte: 1 0 0 0 0 0 0 0 <- Represents a "-128"
上述表示称为“二补”系统,上表已根据Wikipedia article on two's complement改编。
使用这种类型的表示,在相同的8位中,我们可以定义一种表示从-128
到127
的数字范围的方法。此表示通常称为signed byte
,因为它是byte
类型,可以同时具有该数字的正面和负面表示。
在比较unsigned byte
和signed byte
时,它们的范围不同:
unsigned byte : 0 - 255
signed byte : -128 - 127
但是,它们都有256种可能的值组合。它们只能通过它们可以表示的值的范围而不同。这是数据类型的范围。
同样,这也可以扩展到int
,long
,float
,double
类型。分配给每种数据类型的位数不同。例如:
int: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <- 16 bits
long: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <- 32 bits
注意:每种类型的实际位数(例如int
和long
)可能与实现和体系结构有关,因此上图不一定正确。
在上图中,int
类型由16位表示,它可以表示2^16
或65536
个值组合。同样,与byte
一样,值的范围可以是所有正数或分为正数和负数:
unsigned int : 0 - 65535
signed int : -32768 - 32767
(同样,int
不一定必须是16位。)
float
和double
等 Floating point类型也由内存中的位表示,但它们的数据表示形式不同于整数数据类型,例如byte
和{{ 1}}因为它们将一个值存储在内存中作为二进制分数和指数。浮点类型也有范围的概念。
有关如何在现代系统中定义和计算浮点值的详细信息,请参阅Wikipedia has an article on the IEEE-754。
数据类型的数据范围来自值的组合,这些值可以从为单个数据类型的单个单元分配的内存量表示,以及如何将这些可能的组合分配给它们所代表的实际值。 / p>
答案 1 :(得分:6)
范围表示可以存储在给定类型的变量中的最大值和最小值。例如,如果你有unsigned char,如果我们假设数据类型的大小是8位,那么你可以存储0到2 ^ 8-1之间的值,即0-255。
答案 2 :(得分:2)
您应该在标准包含路径中查看limits.h。您的机器类型有确切的范围
答案 3 :(得分:2)
变量的范围
变量的范围是该变量可以容纳的最高值和最低值之间的差值。例如,带符号的16位整数变量的范围是-32,768到+32,767。在整数的情况下,变量定义仅限于整数,范围将覆盖其范围内的每个数字(包括最大值和最小值)。但是,对于其他数字类型,例如浮点数,范围仅表示可以存储的最大和最小数字 - 在该范围内将有许多无法表示的数字。
答案 4 :(得分:2)
C中的大多数类型都与机器有关,因此您应该查看编译器为您的架构提供的limits.h。
对于序数类型,还有一种手动方式来检查它:
min = 0, max = 2**(sizeof(type)*8)-1
-2**(sizeof(type)*8-1), max = 2**(sizeof(type)*8-1)-1
对于浮点值,您可以查看IEEE 754标准,因为它是几乎所有架构中最常用的格式。
编辑:
范围的定义是类型可以容纳的最大值和最小值之间的差异。对于序数类型,它是2**(sizeof(type)*8)
。
答案 5 :(得分:1)
有关c中数据类型及其范围的更多信息:{{3p>
答案 6 :(得分:0)
范围是该数据类型支持的最小值到最大值。
C中的 整数属于16-bit
。
Signed int 将-32768
改为32767
,即(-2^15)
改为(2^15 -1)
无符号整数: 0 to 65535
,即0 to (2^16)
答案 7 :(得分:0)
Range是数据类型可以使用的值的范围,在其最小值和最大值之间定义。
答案 8 :(得分:0)
public class JavaApplication4 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Byte->"+Byte.MAX_VALUE+" "+Byte.MIN_VALUE);
System.out.println("Short->"+Short.MAX_VALUE+" "+Short.MIN_VALUE);
System.out.println("Integer->"+Integer.MAX_VALUE+" "+Integer.MIN_VALUE);
System.out.println("long->"+Long.MAX_VALUE+" "+Long.MIN_VALUE);
System.out.println("float->"+Float.MAX_VALUE+" "+Float.MIN_VALUE);
System.out.println("Double->"+Double.MAX_VALUE+" "+Double.MIN_VALUE);
}
}
答案 9 :(得分:-1)
在x86上,char为1个字节,short为2,int为4,float为4,double为8
根据您使用它们的方式(有符号或无符号),您可以根据该值计算范围。