我想知道多少字节
32位整数
ASCII字符(C ++中的字符?)
指针(4个字节?)
短
浮
使用Delphi,如果它在大多数语言中通常是相同的
另外,上面提到的数据类型是否具有恒定的大小?我的意思是整数0,4,123和32231都具有相同的大小?
答案 0 :(得分:8)
32位整数总是四个字节,因为1个字节= 8位。
Integer
是带符号的32位整数,Cardinal
是无符号的32位整数。因此,无论它们代表什么值,它们总是占用四个字节。 (事实上,简单类型确实具有固定宽度是一个非常重要的事实 - 低级编程实际上取决于此!它甚至是计算机工作方式的基石部分。)
较小的整数类型是Smallint
(16位有符号),Word
(16位无符号)和Byte
(8位无符号)。较大的整数类型是Int64
(64位带符号)和UInt64
(64位无符号)。
Char
在Delphi 2009之前是1字节AnsiChar
;现在它是一个2字节WideChar
。
Pointer
总是4个字节,因为Delphi目前只创建32位应用程序。当它支持64位应用程序时,Pointer
将变为8个字节。
Delphi中有三种常见的浮点类型。这些是Single
,Double
(= Real
)和Extended
。它们分别占用4,8和10个字节。
调查给定类型的大小,例如Short
,只需尝试
ShowMessage(IntToStr(SizeOf(Short)))
参考:
答案 1 :(得分:2)
在C / C ++中,SizeOf(Char)= C / C ++标准要求的1字节。
在Delphi中,SizeOf(Char)依赖于版本(非Unicode版本为1个字节,Unicode版本为2个字节),因此Delphi中的Char更像是C ++中的TChar。
答案 2 :(得分:1)
对于不同的机器可能有所不同,因此您可以使用以下代码来确定整数的大小(用于检查):
cout << "Integer size:" << sizeof(int);
答案 3 :(得分:0)
我不想过多地混淆你,但也存在对齐问题;如果您定义这样的记录,它将取决于编译器的布局结果:
type Test = record
A: Byte;
B: Pointer;
end;
如果使用{$ A1}进行编译,SizeOf(Test)
将最终为5,而使用{$ A4}进行编译会得到8(至少在目前的32位Delphi上是这样!)
这里有各种各样的小问题,所以我建议现在忽略这一点,并在需要时阅读an article like this; - )