为了账号安全,请及时绑定邮箱和手机立即绑定

是否有机器,其大小(Char)!=1,或至少char_bit>8?

是否有机器,其大小(Char)!=1,或至少char_bit>8?

C
互换的青春 2019-06-21 13:07:24
是否有机器,其大小(Char)!=1,或至少char_bit>8?有没有机器(或编译器)sizeof(char) != 1?是吗?C99标准说sizeof(char)关于标准的遵从性实现必须准确为1?如果有,请给我节号和引文。最新情况:如果我有一台计算机(CPU),它不能寻址字节(最小读取是4字节,对齐),但是只有4-s字节(uint32_t), 这台机器的编译器可以定义sizeof(char)到4点? sizeof(char)是1,但是char有32位 (CHAR_BIT宏)UPDATE 2:但是结果的大小不是字节!是恰尔的大小。而字符可以是2字节,还是(可能)7位?UPDATE 3:好的。所有机器sizeof(char) == 1..但是机器有什么CHAR_BIT > 8 ?
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

存储单元被视为一个字符占用的存储量;类型对象的大小。char因此是1。

编辑:在回答您最新的问题,以下的问题和回答是有关的哈比森和斯蒂尔(同上,Ex。4%CH.6)

是否允许有一个C实现char能代表从-2,147,483,648到2,147,483,647之间的数值吗?如果是的话,那会是什么呢?sizeof(char)在执行中?什么是最小和最大的类型范围?int?

允许(如果是浪费的)实现使用32位来表示类型。char..无论实现是什么,sizeof(char)总是1。

虽然这并没有具体解决这样的情况,例如字节是8位和char是其中的4个字节(实际上C99定义是不可能的,请参见下面的事实)sizeof(char) = 1始终明确从C99标准和哈比森和斯蒂尔。

编辑:事实上(这是对你的UPD 2问题的回答),就C99而言sizeof(char) 以字节为单位,再次来自第6.5.3.4节:

量值运算符产生其操作数的大小(以字节为单位)。

因此,结合上面的引号,8位字节和char因为其中的4个字节是不可能的:对于c99来说,一个字节与char.

作为对你提到的7位可能性的回应char这在C99中是不可能的。根据标准5.2.4.2.1节,最小值是8:

其实现-定义的价值应相等。或更大[我的重点]在大小上显示的,有相同的标志。

-非位字段的最小对象的位数(字节)

 **CHAR_BIT 8**

-有符号字符类型的对象的最小值

**SCHAR_MIN -127//−(27−1)**

-有符号字符类型的对象的最大值

**SCHAR_MAX +127//27−1**

-无符号字符类型对象的最大值

**UCHAR_MAX 255//28−1**

-字符类型对象的最小值

**CHAR_MIN**    see below

-字符类型对象的最大值

**CHAR_MAX**    see below

[...]

如果在表达式中使用char类型的对象的值被视为有符号整数,则char_min的值应与Schar_min的值相同,而char_max的值应与Schar_Max的值相同。否则,CHAR_min的值应为0,CHAR_max的值应与UCHAR_MAX的值相同。值UCHAR_MAX应等于2^CHAR_BIT−1。


查看完整回答
反对 回复 2019-06-21
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

有些型号的模拟器件32位SHARC DSP的CHAR_BIT=32,而TMS 32F28xx的德州仪器DSP的CHAR_BIT=16,更新:有GCC 3.2为PDP-10使用char_bit=9(请检查归档文件中的include/Limited s.h)。


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 499 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信