请告诉我,如果我错了,如果一个数字存储为一个字符,它将包含每个字符1个字节的数字(不是4个字节)? 例如,如果我创建一个数字8的int变量和一个char变量'8',int变量将消耗更多的内存? 如果我创建一个int变量作为数字12345和一个字符数组“12345”,字符数组将消耗更多的内存?
并且在文本文件中如果存储了数字,它们是否被视为整数或字符?
谢谢。答案 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)
当我们考虑int
或char
的内存位置时,我们会将其视为一个整体。整数通常使用存储器字存储,该存储器为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。
如果是文本文件,那么通常这些数字将使用字符进行编码,可能是十进制表示。
如果它是二进制文件,那么可能会找到它们,因为它们存储在特定计算机的内存中。
简而言之,取决于。