C语言中字符占多少位?

您所在的位置:网站首页 中文字符占几位 C语言中字符占多少位?

C语言中字符占多少位?

2023-01-01 04:33| 来源: 网络整理| 查看: 265

解答这个问题之前先批评一下,你的基础知识十分不扎实,很多概念是错误的。

字节和位的概念理解错误

计算机用以表示一个 0 或者一个 1 的单位是位,或者比特。若干个位构成一个字节。一个字节有多少个二进制位,是实现决定的。虽然在今天,大多数的计算机硬件体系都是每 8 位构成一个字节,但是历史上是有 9 位和其他位数的。

C 语言标准明确规定,sizeof(char) == 1,这里的 1 是一个字节。所以正确说法是,char 类型占一个字节,而不是一个。一个 char 有多少位呢?不知道。各个机器上不同。在今天的绝大多数常见的体系上是 8 位。

2. %o 的含义搞不清

printf 函数的格式化串里,%o 的含义是以八进制输出一个整型数。所以输出出来的数是八进制的,八进制的 6377450 和 6377440 之间差 8,而不是差 10。

另外,在 printf 中输出指针应当用 %p,这个是输出指针的专有选项,用 %o 和 %d 输出指针都是不安全的。

3. 单个类型、数组及指针等多组概念混乱不清

首先,你开的是数组,不是单个变量。第二个,在 C 中数组名可以退化为指向数组中首个元素的地址。所以 a 在数值上等于 &a[0],b 在数值上等于 &b[0]。a[0] 跟 b[0] 之间还隔着 a[1] a[2] a[3] a[4]。所以 a 跟 b 之间再怎么也得差个 5。不可能是差 1 的。

以上内容还都是书本里的知识。能较好地掌握以上内容的初学者至少应当知道输出的结果不可能是差 1。如果以上只是还没有掌握,就说明你学的很不仔细了。

下面解释为什么输出的答案不是差 5。

我想到的有两种解释。

第一是,有的编译器,会为了避免用户写代码时不小心数组越界覆盖了其他变量的内容,在开数组时往往会比用户实际声明的数组长度长那么两三个。比如 gcc 有时候就会多开 2 元素 (不过不是一定的,有时会触发这个机制有时不会)。vc 有没有这个机制我不清楚,我很少在 vc 下做开发,而且你用的这个 vc6 太老了。

第二是对齐,编译器会出于执行效率考虑将变量的存储位置对齐到 2 的 n 次方的整数倍的地址上。这个是 C 中的进阶内容,初学者可暂时不用掌握,知道有这个概念即可。

至于其他解释请其他答主补充一下吧。至少结论是,你谈 a 跟 b 之间差多少是没有意义的,这个是实现定义的行为,你不能断言说它们一定差 5 还是差 8。可能换个编译器,出来的结果就完全不一样。差 5 差 6 差 7 差 8 还是其他什么值都有可能。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3