【问题标题】:What is the need for signed and unsigned characters in CC中对有符号和无符号字符的需求是什么
【发布时间】:2013-03-14 17:49:05
【问题描述】:

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

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

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

【问题讨论】:

  • I am not asking about signed and unsigned variables。您已经接受了一个准确描述这一点的答案。出于好奇,你为什么?我也不完全确定你的意思是问这是否是你要找的。​​span>
  • 我想找出一个你特别需要有符号/无符号字符变量的问题。由于我没有得到任何答案,因此我得出结论,毕竟可能不存在这样的问题。因此答案被接受。为什么要浪费别人的时间:)。但是,如果您能提供一个示例问题,我将非常感激。
  • signed char 通常用于文本表示。只是按照惯例。 unsigned char 在处理原始数据时要好得多,您需要在其之上处理一些数学运算。例如,当您将值 128 扩展为 int 时,unsigned char 将保持 128 (0x80)。签名的字符会变成 -1 (0xFFFFFFFFFFFFFF80),这可能是你不想要的
  • 谢谢。请将其发布为答案,我会接受。

标签: c


【解决方案1】:

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

引用 C99 的基本原理:

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

【讨论】:

    【解决方案2】:

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

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

    信息#3:由于 (#2),signed 变量与 unsigned(0 到char 情况下为 255)。

    Q-A #1:我们为什么需要unsigned

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

    Q-A #2:我们为什么需要signed

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

    【讨论】:

      【解决方案3】:

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

      所以:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 您的第二段提供了不正确的信息。为什么 32/64 位处理器“不需要”使用字符。它仍然可以节省内存和内存访问。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-09
        • 2020-06-02
        • 2019-01-15
        • 2014-03-12
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        相关资源
        最近更新 更多