C++中64位long类型与64位的long long类型有何区别?它们能存储的数的范围难道不是一样的吗?
时间: 2023-09-14 19:06:08 浏览: 57
### 回答1:
在大多数系统上,long类型是64位的,但是在一些系统上,long类型可能只有32位。而long long类型始终是64位的,所以在这些系统上,它们的区别就是long只能存储32位的整数,而long long可以存储64位的整数。
另外,虽然它们的数值范围在大多数情况下是相同的,但是这并不是绝对的。如果在某些系统上,long类型只有32位,那么它只能存储-2,147,483,648到2,147,483,647之间的整数,而long long可以存储更大的数。在其他系统上,它们的数值范围可能会略有不同,但是差异通常很小。
### 回答2:
C语言中的long类型和long long类型在不同的编译环境下可能有不同的位数,但是一般来说,它们在64位系统上都是64位的。
它们的区别在于它们的范围。在大多数编译环境下,long类型的范围是 -2^63 到 2^63-1,而long long类型的范围是 -2^63 到 2^63-1。
尽管它们的范围具有一样的位数,但是由于它们的有符号类型,在存储负数时有一些微妙的区别。long类型使用的是二进制补码表示法,而long long类型使用了更宽容的二进制补码表示法。
在使用这两种类型时,应该根据实际需求来选择。如果需要更大的范围,则应该选择long long类型。但是需要注意的是,long long类型在一些旧的编译器中可能不被支持,所以在一些特定情况下可能会使用long类型。
总的来说,它们在存储数值的范围上是相似的,但是在存储负数时有一些微妙的差异,需要根据实际情况进行选择。
### 回答3:
C语言中的64位long类型与64位long long类型之间存在一些区别。
首先,它们的存储空间大小是相同的,都是64位。然而,它们的范围是有所不同的。
64位long类型的范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807(即-2^63到2^63-1)。这是由于long类型的一半取了正数,一半取了负数。
而64位long long类型的范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807(即-2^63到2^63-1),与long类型的范围相同。
尽管它们的范围相同,但是使用long long类型能够更好地提供更大范围的整数存储能力,而long类型往往用于兼容较早的C编译器和平台。
此外,还有其他一些操作和转换时的细微差别,例如在printf函数中使用格式说明符的时候,long类型使用%ld表示,而long long类型使用%lld表示。
总结起来,64位long和64位long long类型的存储空间相同,但是long long类型提供了更大的整数范围。