C语言 请问signed char,unsigned char,short,unsigned sh
作者&投稿:枝届 (若有异议请与网页底部的电邮联系)
和
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
次方减一。
关转复方: 负值的一般是打印不出字符来的,但有例外的 对于汉字来说,负值的作用可以用来表示汉字,两个负值的字符就可以拼一个汉字出来.当然,对于不同编码,拼出来的汉字是不同的,比如UTF-8用的是3个字符拼出一个汉字来
达孜县17261821723: C语言中,int16位怎么转成signed char8位?要加符号吗?看右边八位吗?比如 - 2的in - ?
关转复方: short a = -124; // 16位 int unsigned char b,c; // BYTE b,c; b = a & 0XFF; // 低8位赋给b c = (a && 0XFF00) >> 8; // 高8为赋给c
达孜县17261821723: 在C语言中,unsigned char是什么类型? - ?
关转复方: unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型.整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号...
达孜县17261821723: c语言signed char, char, unsinedchar区别 - ?
关转复方: 我不是很赞同这句话!!(1) char 和 signed char是一个意思,没有unsigned标识,就是有符号类型 unsined char是无符号类型!(2) char ch='a' ; unsigned char ch1='b' ; 无论是ch=ch1; 还是ch1=ch ;都不需要类型转化,因为它俩的大小和数据存储方式是相同的,区别只在字节的第一位如何解释的问题! (3) 有符号类型首位表示符号,0正,1负.无符号没这说法,8位全表示数. 用这个来说类型转化是有问题的!
达孜县17261821723: C语言中什么是字符型数据?如何声明? - ?
关转复方: char类型, 一半情况下占用8位,分为signed和unsigned,在计算机中全都以ASCII值表示,signed]char 有符号字符型 长度(字节)为1 -128~127 unsigned char 无符号字符型 长度(字节)为1 0~255 书中基本只给到0~127 //char c ='a';char c ; c = 'a';
达孜县17261821723: c语言中signed 和unsigned是什么意思 - ?
关转复方: 1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数. 2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负. 3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用...
达孜县17261821723: C语言中unsigned和signed在声明时有什么作用? - ?
关转复方: signed和unsigned用于修饰整数类型(包括char,从ANSI C89标准开始支持). signed表示有符号,unsigned表示无符号.对应的有符号数的最大取值要比无符号的小约一半,因为最高一位被用来表示符号. 默认的int、short、long、long long...
达孜县17261821723: C语言中unsigned和signed数据的转换 - ?
关转复方: 先讲一下 原码 补码 反码的 概念 正整数的 原码 补码 反码 都是一样的负数的反码是将其原码除 符号位之外的各位取反 负数的补码是将其原码除 符号位之外的各位取反 再在末尾加1假设 存在 一个字节的整型 signed int8 x = -5 x的原码1000 ...
达孜县17261821723: c语言变量分为signed 和unsigned 两种,这里有符号和没符号 区别在哪里? 举个例子说下. - ?
关转复方: char的范围是-128到127 unsigned char的范围是0到255
达孜县17261821723: signed char型数据的范围为什么事 - 128 - 127? - ?
关转复方: 那么你想想1OOOOOOO和00000000的区别 感觉负数是不是用补码表示的 那么就能到—128le