在C语言中,unsigned char是什么类型
的有关信息介绍如下:unsignedc360问答har是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型。整型的每一种都有无符号(unsigned)和有符号(si源支室纸他南香首年倍gned)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(ch先每留样吗校甚抗着ar有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符香尔么曾船月轻印号版本和有符号版本的区别就是无天燃理照帝符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范为-32768~32767,而unsigned能存储的数据范围则是0~65535。
同样,在32位系统中一个char类型一般为8个bit,所以能存储的数据范围为-128~127,而unsignedchar则是0~255,字符型所存储的数据是用来表示字符的,热孙掌导感干弦刑友货某例如ASCⅡ或U设nicode。
关于char的符号(选自thinkinginC++2ndvol1):
signed
isthedefa皮ultandisonlynecessarywithchar;charmayormaynot
defaulttosigned.B钢班露济陆眼离吃面球谁yspecifyingsignedchar,youforcethesignbitto
beused.
译:有符号类型是默认(指的是对于其他整型来说)的类型并且仅对于char来说才是必须的。char有可能是signed也有可能是unsigned(我想这可能取决于编译器浓的找季见怀增算或具体实现)。但通过显式地指定一个char为sig神企率输逐货月ned,你就迫使其成她演吗温聚器为有符号的字符型
在定义整数变量的型态的时候可以加上unsigned或是signed,例如unsignedcharunsignedshort
(int)unsignedlong(in济我夜讲万值鸡品城t)unsigne李销敌断广征拿轴村停dint-------工了鱼汉马宪---signedcharsigned
short(笔样专固政故int)signedlong(int)signed胶连杂切通学关态求粉int--------------上面sign菜问剧帝绍那图厚地ed
有加和没有加是一样的意义加上unsigned以后,1.所需要的数据储存空间和没有加unsigned时是一样的2.在使用
printf()打印时基本上你必须分清楚unsigned有影响到的是参数的传递,使用%d或是%u基本上是看程序设计者自己的选择
inti=-1;printf("%d%u/n",i,i);会印出-14294967295unsignedinti=-1;
printf("%d%u/n",i,i);也会印出-14294967295chari=-1;printf("%d%u/n",
i,i);还是会印出-14294967295但是unsignedchari=-1;printf("%d%u/n",i,
i);则会印出255255这不是%d和%u的问题,而是参数传递时数据转换的问题(见下面第3项)不一样的地方有下面几个
1.数据的范围基本上加上unsigned以后会变成2倍2.程序里比较大小的时候inti=1;intj=-1;if
(i>j)printf("i>j/n");elseprintf("i<=j/n");你会发现结果是i>j
unsignedinti=1;intj=-1;if(i>j)printf("i>j/n");else
printf("i<=j/n");你会发现结果是i<=j也就是说signed和unsigned在比较的时候
compiler会把signedint自动当成unsignedint来比较2.数据转换的时候(或是函式呼叫的时候)char
i=-128;intj=i;变量i里面的数据只有1个字节,要放进变量j里面的时候需要做sign
extension也就是多出来的3个字节(24个bit)都要填入原来i的signbit(第8个bit)
以上例来说(用二进制表示)i:10000000j:11111111111111111111111110000000
unsignedchari=-128;intj=i;由unsigned转为signed时前面一率补0用二进制表示
i:10000000j:00000000000000000000000010000000chari=-128;
unsignedintj=i;还是做signextension用二进制表示i:10000000j:11111111
111111111111111110000000函式呼叫的时候会做型态的转变,例如voidfun(intx){...}
呼叫时如果用unsignedchari=-1;fun(i);就会自动做转换