在C / C ++中,unsigned char用于什么?它与常规有什么不同char?
举例来说,使用unsigned char:
unsigend字符经常被用在计算机图形学中,经常(虽然不总是)给每个颜色分量指定一个字节。看到一个RGB(或RGBA)颜色表示为24(或32)位,每个都是无符号字符。由于无符号字符值落在[0,255]的范围内,因此这些值通常被解释为
所以你最终会以(255,0,0) - >(100%红色,0%绿色,0%蓝色)RGB红色结束。
为什么不使用签名字符?算术和位移是成问题的。正如已经解释的那样,一个有符号的字符范围基本上被移动了-128。将RGB转换成灰度的非常简单和朴素(大多数是未使用的)方法是对所有三种颜色成分进行平均,但是当颜色成分的值为负值时会出现问题。使用无符号字符算术时,红(255,0,0)平均为(85,85,85)。但是,如果这些值是有符号字符(127,-128,-128),我们最终会得到(-99,-99,-99),在我们的unsigned char空间中将是(29,29,29),这是不正确的。
在C ++中,有三种不同的字符类型:
如果你使用的字符类型的文字,使用不合格的char:
它也可以作为一个数字值来处理,但是这个值是否被当作有符号或无符号来处理是没有规定的。注意通过不等式进行字符比较 - 尽管如果你限制自己的ASCII(0-127),你就是安全的。
如果你将字符类型用作数字,请使用:
“至少”,因为C ++标准只给出了每个数字类型需要覆盖的最小值范围。sizeof (char)被要求为1(即一个字节),但理论上一个字节可以是例如32位。sizeof仍然会报告其大小1 - 意味着你可以拥有sizeof (char) == sizeof (long) == 1。