字符大小(以字节为单位)和整数

时间:2018-03-27 10:18:40

标签: c char int text-files

请告诉我,如果我错了,如果一个数字存储为一个字符,它将包含每个字符1个字节的数字(不是4个字节)? 例如,如果我创建一个数字8的int变量和一个char变量'8',int变量将消耗更多的内存? 如果我创建一个int变量作为数字12345和一个字符数组“12345”,字符数组将消耗更多的内存?

并且在文本文件中如果存储了数字,它们是否被视为整数或字符?

谢谢。

4 个答案:

答案 0 :(得分:1)

是的,你的所有答案都是正确的。

int将始终占用sizeof(int)个字节,8(int)假设32位int将占用4个字节,而8(char)占用一个字节。< / p>

考虑上一个问题IMO的方法是将数据存储为 bytes char int 是解释字节的方式,所以在文本文件中你可以写字节,但是如果你想写人类可读的&#34; 8&#34;在文本文件中,必须以某种编码形式写入,例如ASCII,其中字节对应于人类可读的字符。所以,写'&#34; 8&#34;你需要写字节0x38(ASCII值8)。

因此,在文件中你有数据,而不是 int chars

答案 1 :(得分:0)

当我们考虑intchar的内存位置时,我们会将其视为一个整体。整数通常使用存储器字存储,该存储器为4字节或32位,因此从0到4,294,967,295(232-1)的整数可以存储在int变量中。由于我们需要总共32位(32/8 = 4),因此int变量需要4个字节。

但是为了存储ascii字符,我们需要7位。 ASCII表有128个字符,值从0到127.因此,7位足以表示ASCII中的字符; (但是,大多数计算机通常为ASCII字符保留1位(即8位)

关于你的问题: -

  

如果我创建一个int变量作为数字12345和一个字符数组“12345”,字符数组将消耗更多的内存?

从上面的定义来看是的,这是真的。在第一种情况下(int值)它只需要4个字节,而对于第二种情况它需要总共5个字节。原因是在第一种情况下12345是单个整数值,在第二种情况下"12345"是总共5个ascii字符。即使在第二种情况下,实际上还需要一个字节来保存'\0'字符作为字符串的一部分(标记字符串的结尾)。

答案 2 :(得分:0)

当定义int时,将根据编译器选项分配内存(可以是4到8个字节)。分配给int的编号按原样存储。 例如int a = 86; 数字86将存储在分配给。

的存储器中

定义char时,会为每个字符分配编号。当需要打印这些字符时,会打印相同的字符,但是当它存储在内存中时,它将存储为数字。这些被称为ASCII字符,还有一些。 存储的分配是1Byte,因为使用1Byte可以表示2 ^ 8个符号。

答案 3 :(得分:-1)

  

如果一个数字存储为一个字符,它将包含每个字符1个字节的数字(不是4个字节)?例如,如果我创建一个数字8的int变量和一个char变量'8',int变量将消耗更多的内存?

是的,因为它保证(假设8位字节):

sizeof(char) == 1
sizeof(int)  >= 2    
  

如果我创建一个int变量为12345,字符数组为“12345”,那么字符数组会占用更多内存?

正确。看到之间的不同:

strlen("12345") == 5
sizeof(12345)   >= 2

当然,对于像7这样的小数字,事实并非如此:

strlen("7") == 1
sizeof(7)   >= 2
  文本文件中的

如果存储了数字,它们会被视为整数还是字符?

要阅读任何数据(无论是文件还是粘土平板电脑!),您需要了解其encoding

如果是文本文件,那么通常这些数字将使用字符进行编码,可能是十进制表示。

如果它是二进制文件,那么可能会找到它们,因为它们存储在特定计算机的内存中。

简而言之,取决于。