我目前正在编写一个涉及处理字节的C程序.说到字节,我真的很担心以下问题.
字符是否由ascii代码存储在内存中?说'A'有anscii代码65.所以它以与整数65相同的方式存储在内存中?
如果是这样,机器如何区分字符和整数?
如果字符由ascii代码存储,则ascii代码是整数.一个整数应该占用至少2个字节,一个字符怎么只占用1个字节?
最后一个是关于不同体系结构的整数.在16位机器上,如果1存储为000 ... 0001,那么在32位机器上,1仍然以相同的方式存储,只需在前面添加0?
img*_*x64 10
字符是否由ascii代码存储在内存中?说'A'有anscii代码65.所以它以与整数65相同的方式存储在内存中?
是的,但是charC中的a是单字节,而int取决于机器架构.
如果是这样,机器如何区分字符和整数?
机器代码不关心内存中的字节代表什么.编译器的工作是将代码转换为执行程序功能的机器指令.
如果字符由ascii代码存储,则ascii代码是整数.一个整数应该占用至少2个字节,一个字符怎么只占用1个字节?
ASCII可以适合单个字节(大小为a char).在C语言中处理非ASCII文本更复杂.wchar_t这是非便携式的,许多人认为它已经破碎.C11介绍char16_t和char32_t,分别可用于UTF-16和UTF-32.
最后一个是关于不同体系结构的整数.在16位机器上,如果1存储为000 ... 0001,那么在32位机器上,1仍然以相同的方式存储,只需在前面添加0?
这大多是正确的,但它也取决于架构的字节顺序.
小智 5
是的,ASCII 字符按其值存储。但是存储“A”(65 = 0x41)可能与存储 65 本身不同,并且它的完成方式取决于您的机器架构。char 可以用单个字节存储,而 int 至少需要 2 个字节(在现代机器中更常见的是 4 个字节),因此它们的存储方式可能不同。
事实并非如此。我们可以拥有等于 0x41 的内存。区分“A”和 65 的唯一方法是根据您向编译器声明的方式。换句话说,如果您将变量声明为 int,它将被视为 int。
ASCII 值非常少,您可以用少于 8 位来表示所有可能性。因此,使用 16 位来表示会浪费内存。在当今的系统中,这不再是一个大问题,但在内存有限的系统上,您可能希望将额外的字节用于其他用途,而不是浪费空间。
或多或少,是的。1 将始终存储为 0000....1,因此二进制位数的总数等于填满 int 的空间。因此,在 8 位系统上,两个字分别为 00000000 和 00000001,在 16 位系统上,一个字为 000000000000001。