C语言 请问signed char,unsigned char,short,unsigned sh

C语言 请问signed char,unsigned char,short,unsigned short,unsigned int,long,unsigned long,long long,unsigned long long这些数据类型的格式说明符对应是什么?我想知道计算机里各个数据类型的范围,以后好针对性地使用

第1个回答  2019-02-07
signed

unsigned
是C语言中的类型指示符(type
specifier),signed
指示被声明的对象的类型为有符号整型(signed
integer
type),unsigned
指示被声明的对象的类型为无符号整型(unsigned
integer
type)。
除了用于
bit
field,单独使用的
int
即指示有符号整型,此时
signed
没有实际意义,int

unsigned
一同使用时指示无符号整型。
char,signed
char,unsigned
char
是三个不同的类型(char
和另外两个之一的二进制表示方法相同,至于
char
具体是否有符号,通常可通过编译指令指定)。
对于
bit
field,
signed
int
类型的
bit
field
总是有符号的,unsigned
int
类型的
bit
field
总是无符号的,而单独使用的
int
是否表示有符号,由编译器定义。
无符号数的二进制表示(object
representation)由两部分构成,即
value
bits

padding
bits,value
bits
是一串二进制位,第
M

value
bit
表示
2

M-1
次方,因此
N

value
bits
加起来就可以表示
0

2

N
次方减一
这个范围内的所有整数。padding
bits
不影响数的值(可能不存在
padding
bit
)。
有符号数的二进制表示(object
representation)由三部分构成,即
sign
bit,value
bits

padding
bits
,其中
sign
bit
只有一位,这一位的值为
0
时表示这个数为正数,此时它不影响有符号数的值,value
bits
的含义与无符号数中的
value
bits
相同。sign
bit

1
时表示这个数为负数,此时这个数可以使用原码、反码、补码
中的任何一种编码来表示数值。和无符号数一样,padding
bits
不影响数的值(可能不存在
padding
bit
)。
例如,当某个无符号类型有
32
个value
bits
时,它的第
1

value
bit
表示
2

0
次方,第
2

value
bit
表示
2

1
次方,……,第
32

value
bit
表示
2

31
次方。当所有
value
bits
都为
1
时,就表示
2

0
次方加
2

1
次方加……加
2

31
次方,即
2

32次方减一;当所有的
value
bits
都为
0
时,就表示
0
,这个无符号类型的取值范围就是
0

2

32
次方减一。
与之对应的有符号类型有
1
个sign
bit

31

value
bits,当
sign
bit

0
时,可以表示
0

2

31
次方减一范围内的任何一个整数,如果使用补码,当
sign
bit

1
时,可以看作
sign
bit
的值是
2

31
次方
的相反数,因此当
sign
bit

1

sign
bit
加上
value
bit
一共可以表示
2

31
次方
的相反数到
-1
范围内的任何一个整数,考虑所有情况,这个有符号类型的取值范围就是
2

31
次方
的相反数

2

32
次方减一。
相似回答