猿问

“ char”总是总是有8位吗?

我一直认为:

  1. 一个char由一个字节表示,

  2. 一个字节总是可以指望有8位,

  3. sizeof (char)始终是1

  4. 我可以分配的最大理论内存量(以chars为单位)是RAM的字节数(+交换空间)。

但是,既然我已经阅读了有关字节的Wikipedia条目,现在就不能确定了。

我的假设中哪一个是错误的?哪个危险?


牛魔王的故事
浏览 856回答 3
3回答

子衿沉夜

是的,char而且byte是几乎一样的。字节是最小的可寻址内存量,charC中的a也是如此。&nbsp;char始终具有大小1。根据规范,第3.6节:字节数据存储的可寻址单元,其大小足以容纳执行环境的基本字符集的任何成员和3.7.1节字符:字符单字节字符<C>位表示形式,适合一个字节A&nbsp;char有CHAR_BIT位。它可以是任何数字(根据规范,可以是8或更大),但是肯定是最常见的8。但是,有一些真正的机器具有16位和32位char类型。&nbsp;CHAR_BIT在中定义limits.h。根据规范,第5.2.4.2.1<limits.h>节的整数类型的大小:以下给出的值应由适合在#if预处理指令中使用的常量表达式代替。此外,除了CHAR_BIT和之外MB_LEN_MAX,以下内容应替换为与根据整数提升转换为相应类型的对象的表达式具有相同类型的表达式。其实现定义的值的大小(绝对值)应等于或大于所示的相同符号。—不是位字段的最小对象的位数(字节)&nbsp;&nbsp;&nbsp;&nbsp;CHAR_BIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8sizeof(char) == 1。总是。根据规范第6.5.3.4sizeof节,操作员第3段:应用于类型为char,unsigned char或的操作数signed char(或其限定版本)时,结果为1。您可以分配的内存与系统允许分配的内存一样多-标准中没有定义内存的多少。您可以想象,例如,一台具有云存储支持的内存分配系统的计算机-您可分配的内存实际上可能是无限的。这是完整的规范部分7.20.3.3&nbsp;malloc函数:概要1个&nbsp;#include <stdlib.h>&nbsp;&nbsp;&nbsp;void *malloc(size_t size);描述2该malloc函数为大小由其指定size且值不确定的对象分配空间。退货3该malloc函数返回空指针或指向分配空间的指针。这是整个规范的全部,因此您可以依靠的确实没有任何限制。

撒科打诨

sizeof(char)始终为1个字节。字节并不总是一个八位位组,但是:例如,德州仪器(TI)TI C55x是具有16位字节的DSP。

守着一只汪

sizeof(char)定义为始终为1。从C99:当将其应用于具有char,unsigned char或signed char类型(或其限定版本)的操作数时,结果为1。但是,不能保证为8位。实际上,在绝大多数平台上都可以,但不可以,但从技术上讲,您不能始终依靠这种方式(也不要紧,sizeof无论如何都应使用)。
随时随地看视频慕课网APP
我要回答