0

C语言中对有符号和无符号字符有什么要求?

在 C 中使用有符号和无符号字符有什么特殊原因吗?还是只是为了完整性而添加,以便编译器在添加有符号/无符号修饰符之前不必检查数据类型?

我不是在询问有符号和无符号变量。我的疑问是无符号字符变量不足以使您必须依赖有符号字符变量的特殊情况。

4

4 回答 4

3

Achar可以是有符号的或无符号的,具体取决于对底层硬件最有效的方法。关键字signedunsigned允许您明确指定您想要其他东西。

引用 C99 的理由:

指定了三种类型charsigned、plain 和unsigned。与先前的实践一样,根据实现, plainchar可以表示为有符号或无符号。该类型signed char是在 C89 中引入的,以便在那些实现普通charunsigned char. 出于对称原因,signed允许关键字作为其他整数类型的类型名称的一部分。

于 2013-03-14T21:54:39.993 回答
2

信息 #1: char在 C 中只是一个小的int,它使用 8 位。

信息#2:signed和之间的区别在于unsigned表示中的一位用作signed变量的符号位。

信息#3:由于(#2),signed变量保持不同的范围(-128 到 127,char以防万一)与unsigned(0 到 255,以防万一)相比char

QA #1:我们为什么需要unsigned

在大多数情况下(例如表示指针)我们不需要有符号变量。按照惯例,内存中的所有位置都作为无符号地址的连续数组公开给程序。

QA #2:我们为什么需要signed

一般来说,做有符号算术。

于 2013-03-14T18:06:17.380 回答
1

我假设您使用 char 来保存数字,而不是字符。

所以:

signed char 至少为您提供 -128 到 127 的范围。unsigned char 至少为您提供 0 到 255 的范围。

标准要求 char 至少为 8 位,所以这至少是我这么说的原因。这些值可能更大。

无论如何,要回答您的问题,将 char 设置为 unsigned 释放了将第一位作为“符号”位的要求,从而使您可以保持有符号 char 的近两倍。

于 2013-03-14T17:59:36.577 回答
0

您必须了解的是数据类型“char”实际上只是一个整数,通常为 8 位宽。假设您尊重减少的值限制,您可以像使用任何其他间数据类型一样使用它。没有理由将“char”限制为字符。

在 32/64 位处理器上,通常不需要使用如此小的整数字段,但在 8 位处理器(例如 8051)上,8 位整数不仅处理速度快得多,而且使用更少(有限)记忆。

于 2013-03-14T17:54:02.927 回答