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

问题描述:

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

是否有有在C符号和无符号字符一些特殊的原因吗?还是仅仅为了完整而添加它,以便编译器在添加signed/unsigned修饰符之前不必检查数据类型?

我不问有关已签名和未签名的变量。我的疑问是关于无符号字符变量不足以满足您必须依赖于有符号字符变量的特殊情况。

+0

http://en.wikipedia.org/wiki/Signed_number_representations – 2013-03-14 17:50:13

+0

'我不是在询问有符号和无符号的变量。你已经接受了一个正确描述的答案。出于好奇,你为什么?我也不完全确定你的意思,要问你是否在寻找。 – Hydronium 2013-03-14 18:23:18

+0

我想找出一个特别需要有符号/无符号字符变量的问题。由于我没有得到任何答复,我认为可能不存在这样的问题。因此答案被接受。为什么浪费别人的时间:)。但如果你能提供一个例子问题,我将会非常感激。 – Deepu 2013-03-14 18:30:21

A char可以是有符号的或无符号的,这取决于底层硬件的效率最高。关键字signedunsigned允许您明确指定您需要别的东西。

从C99理引述:指定

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

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

在32/64位处理器上,通常不需要使用这样的小整数字段,但是在像8051这样的8位处理器上,8位整数不仅处理和使用要快得多更少(有限)的内存。

+0

为什么downvotes? – 2013-03-14 17:58:34

+1

您的第二段提供了不正确的信息。为什么32/64位处理器不需要使用字符。它仍然节省内存和内存访问。 – 75inchpianist 2013-03-14 18:01:09

我假设你使用的是炭持有数字,而不是字符。

所以:

signed char给你至少-128到127的范围。 无符号字符至少给你0到255的范围。

一个char是通过标准的要求是至少有8位,所以这是我至少说的原因。这些值可能会更大。

总之,要回答你的问题,有一个char为无符号释放的第一位是“符号”位的要求,从而使您可以接近双认为,一个符号字符的。

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

信息#2:差异与unsigned之间signed,是在表示中的一个比特被用作符号位为一可变signed

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

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

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

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

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