2017-02-16 68 views
1

在我的教科书中,它表示所有整数都被认为是默认签名的,我在网上找到的大部分源文件都说要对浮点数进行签名,那么使用signed关键字有什么意义呢?为什么你要指定一个整数作为C签名?

+3

您可能会将它用于'char'变量,它们[默认情况下未指定为有符号或无符号](http://stackoverflow.com/questions/2054939/is-char-signed-or- unsigned -默认)。 –

回答

6

在C语言中,你可以省略类型名的部分,所以你可以实际使用signed代替int,这可能看起来很好的对称:

void f(signed a, unsigned b); 

或者更冗长:

unsigned int foo; 
signed int bar; 

如果您在附近不使用这两种类型,则可能更喜欢名称更简单的形式:

int x; // normal 
auto y; // quaint 
signed auto graph; // why not 
2

至少有两种情况需要关键字unsigned。因为它可以表现为signed charunsigned char。这有三种不同的类型:char,signed charunsigned char

第二个问题是在位字段中使用关键字,因为具有类型说明符int的位字段的行为可以是signed intunsigned int

+0

C11听起来像一个简单的'int'不会被允许作为一个位域的类型(6.7.2.1/5)移植。 –

+0

@KerrekSB有一篇文章写道:“对于位字段,它是实现定义的,是指定int指定的是与signed int相同的类型还是与unsigned int指定的类型相同。 –

+0

我现在看到它,谢谢! –

0

signed单词没有得到太多的使用。 unsigned会这样做,因为所有整数类型(char值得检查) 都自我定义为signed。 unsigned floatunsigned doubleunsigned long double不存在。 //signed float/double/long double are errors to.

+0

'长双'是有效C. – alk

+0

是的,但'签名长双'和'无符号长双'arent –

相关问题