【问题标题】:what is the use of signed char and unsigned char有符号字符和无符号字符有什么用
【发布时间】:2018-05-22 05:50:47
【问题描述】:

因为 C 语言在内部使用 char 作为整数(存储对应的 ASCII)。对于内部计算,我们可以使用有符号和无符号字符。

除此之外,还有什么用处??

【问题讨论】:

  • 希望你能找到答案here
  • 一个例子:一个 unsigned char 指针被允许给其他类型起别名,因此它可以用来访问其他类型的位模式。
  • @Outlaw :我看到了,还有其他不同吗?
  • ASCII 是一种常见的字符表示,但其他已经存在,例如 EBCDIC
  • @SergeBallesta link

标签: c memory


【解决方案1】:

signedunsigned char 首先是小整数。您是否需要存储大量的小数字(在 [-127, +127]¹ 或 [0, 255] 范围内)?与几乎任何其他类型相比,您可以使用 signedunsigned 字符数组并节省内存。这就是为例如所做的事情。图像 - 灰度图像通常存储为 unsigned char 的数组(而 RGB 图像通常存储为 3 个 unsigned char 组件的数组)。

char 的第二种用法是用于字符串,您可能已经看到了;请注意,char 是与signed charunsigned char 不同的类型,并且它的签名是实现定义的。这在许多情况下是愚蠢和不方便的 - 并且会导致可悲的事情,例如在调用 toupper/isupper 系列的函数时强制转换为 unsigned char

最后,char & co。被定义为 C 抽象机的“底层存储”。 sizeof(char) == 1 根据定义,任何类型都可以通过 (signed|unsigned)? char 指针来别名,以访问其底层位表示。


  1. 是的,-127; [-127, +127] 是标准允许的signed char 的最小范围,因为它仍然允许符号和幅度表示;更现实的是,在本世纪任何现实世界的机器上,它至少会是 [-128, 127]。

【讨论】:

  • 我为您的页面status 提供了答案,size_t 足以容纳大量数据。但在 int 和 double 的情况下,它们的最大大小已经由编译器定义(32bit->unsigned int, 64->unsigned long long )。
  • @ShyjuCR 这没有任何意义。 size_t也有最大值
  • @ShyjuCR: 呃...我不明白你在说什么,但没有。
猜你喜欢
  • 2019-01-15
  • 2010-09-30
  • 1970-01-01
  • 2014-01-28
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多