C语言 请问signed char,unsigned char,short,unsigned sh
C语言请问signedchar,unsignedchar,short,unsignedshort,unsignedint,long,unsignedlong,longlo...
C语言 请问signed char,unsigned char,short,unsigned short,unsigned int,long,unsigned long,long long,unsigned long long这些数据类型的格式说明符对应是什么?我想知道计算机里各个数据类型的范围,以后好针对性地使用
展开
2个回答
展开全部
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 次方减一。
除了用于 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 次方减一。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询