C中有符号和无符号字符的需要是什么

C中有符号和无符号字符的需求是什么?

在C中有一个签名和未签名的字符是否有一些特殊原因? 或者只是为了完整性而添加它,以便编译器在添加signed / unsigned修饰符之前不必检查数据类型?

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

char可以是有符号或无符号的,具体取决于底层硬件的最有效性。 关键字signedunsigned允许您明确指定您想要其他内容。

引用C99的理由:

指定了三种类型的charsigned ,plain和unsigned 。 根据实现,普通char可以表示为有符号或无符号char ,如在先前实践中那样。 在C89中引入了signed char类型,以便在将纯char作为unsigned char实现的系统上提供一个单字节有符号整数类型。 出于对称的原因,允许将关键字signed作为其他整数类型的类型名称的一部分。

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

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

信息#3:作为(#2)的结果,与unsigned (在char情况下为0到255)相比,有unsigned变量保持不同的范围(在char情况下为-128到127)。

质量保证#1:为什么我们需要unsigned

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

质量保证#2:我们为什么需要signed

一般来说,要做签名算术。

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

所以:

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

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

无论如何,要回答你的问题,将char作为unsigned释放第一位的要求是’sign’位,从而允许你保持接近有符号char的两倍。

你必须要理解的是,数据类型“char”实际上只是一个整数,通常是8位宽。 您可以像使用任何其他inter数据类型一样使用它,假设您遵守降低的值限制。 没有理由将“char”限制为字符。

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