永发信息网

在C语言中,unsigned char是什么类型

答案:5  悬赏:30  手机版
解决时间 2021-03-17 16:28
  • 提问者网友:黑米和小志
  • 2021-03-16 17:51
在C语言中,unsigned char是什么类型
最佳答案
  • 五星知识达人网友:白昼之月
  • 2021-03-16 18:24
unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型。整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范为-32768~32767,而unsigned能存储的数据范围则是0~65535。
同样,在32位系统中一个char类型一般为8个bit,所以能存储的数据范围为-128~127,而unsigned char则是0~255,字符型所存储的数据是用来表示字符的,例如ASCⅡ或Unicode。
关于char的符号(选自thinking in C++ 2nd vol1):

signed
is the default and is only necessary with char; char may or may not
default to signed. By specifying signed char, you force the sign bit to
be used.

译:有符号类型是默认(指的是对于其他整型来说)的类型并且仅对于char来说才是必须的。char有可能是signed也有可能是unsigned(我想这可能取决于编译器或具体实现)。但通过显式地指定一个char为signed,你就迫使其成为有符号的字符型

在定义整数变量的型态的时候可以加上 unsigned 或是 signed, 例如 unsigned char unsigned short
(int) unsigned long (int) unsigned int ---------- signed char signed
short (int) signed long (int) signed int -------------- 上面 signed
有加和没有加是一样的意义 加上 unsigned 以后, 1. 所需要的数据储存空间和没有加 unsigned 时是一样的 2. 在使用
printf() 打印时基本上你必须分清楚 unsigned 有影响到的是参数的传递, 使用 %d 或是 %u 基本上是看程序设计者自己的选择
int i=-1; printf("%d %u/n", i, i); 会印出 -1 4294967295 unsigned int i=-1;
printf("%d %u/n", i, i); 也会印出 -1 4294967295 char i=-1; printf("%d %u/n",
i, i); 还是会印出 -1 4294967295 但是 unsigned char i=-1; printf("%d %u/n", i,
i); 则会印出 255 255 这不是 %d 和 %u 的问题, 而是 参数传递时数据转换的问题 (见下面第 3 项) 不一样的地方有下面几个
1. 数据的范围基本上加上 unsigned 以后会变成 2 倍 2. 程序里比较大小的时候 int i=1; int j=-1; if
(i>j) printf("i>j/n"); else printf("i<=j/n"); 你会发现结果是 i>j
unsigned int i=1; int j=-1; if (i>j) printf("i>j/n"); else
printf("i<=j/n"); 你会发现结果是 i<=j 也就是说 signed 和 unsigned 在比较的时候
compiler 会把 signed int 自动当成 unsigned int 来比较 2. 数据转换的时候 (或是函式呼叫的时候) char
i = -128; int j = i; 变量 i 里面的数据只有 1 个字节, 要放进 变量 j 里面的时候需要做 sign
extension 也就是多出来的 3 个字节 (24 个 bit) 都要 填入原来 i 的 sign bit (第 8 个 bit)
以上例来说 (用二进制表示) i: 10000000 j: 11111111 11111111 11111111 10000000
unsigned char i = -128; int j = i; 由 unsigned 转为 signed 时前面一率补 0 用二进制表示
i: 10000000 j: 00000000 00000000 00000000 10000000 char i = -128;
unsigned int j = i; 还是做 sign extension 用二进制表示 i: 10000000 j: 11111111
11111111 11111111 10000000 函式呼叫的时候会做型态的转变, 例如 void fun(int x) { ... }
呼叫时如果用 unsigned char i=-1; fun(i); 就会自动做转换
全部回答
  • 1楼网友:雪起风沙痕
  • 2021-03-16 21:01
无符号字符型。 unsigned是无符号的意思 char是字符型,存符号或字母。
  • 2楼网友:第幾種人
  • 2021-03-16 20:21
无符号字符型,占1个字节,就是8bit。所以大小范围是0到255
  • 3楼网友:一袍清酒付
  • 2021-03-16 19:18
char是字符变量的说明符

字符变量的取值是字符常量,即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。
例如:
char a,b; 每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ascii码的形式存放在变量的内存单元之中的。如x的
十进制ascii码是120,y的十进制ascii码是121。对字符变量a,b赋予'x'和'y'值: a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码: a 0 1 1 1 1 0 0 0
 b 0 1 1 1 1 0 0 1
所以也可以把它们看成是整型量。 c语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时, 允许把字符变量按整型量输出,也允许把整型量按字符量输出。 整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时, 只有低八位字节参与处理。
main()
{
 char a,b;
 a=120;
 b=121;
 printf("%c,%c\n%d,%d\n",a,b,a,b);
} 
a ■ b ■
a <-- 120
b <--- 121
显示程序结果

本程序中说明a,b为字符型,但在赋值语句中赋以整型值。从结果看,a,b值的输出形式取决于printf函数格式串中的格式符,当格式符为"c"时,对应输出的变量值为字符,当格式符为"d"时,对应输出的变量值为整数。
void main()
{
 char a,b;
 a='x';
 b='y';
 a=a-32;
 b=b-32;
 printf("%c,%c\n%d,%d\n",a,b,a,b);
}
  • 4楼网友:七十二街
  • 2021-03-16 18:46
unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型。整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。 同样,在32位系统中一个char类型一般为8个bit,所以能存储的数据范围为-128~127,而unsigned char则是0~255,字符型所存储的数据是用来表示字符的,例如ASCⅡ或Unicode。 关于char的符号(选自thinking in C++ 2nd vol1): signed is the default and is only necessary with char; char may or may not default to signed. By specifying signed char, you force the sign bit to be used. 译:有符号类型是默认(指的是对于其他整型来说)的类型并且仅对于char来说才是必须的。char有可能是signed也有可能是unsigned(我想这可能取决于编译器或具体实现)。但通过显式地指定一个char为signed,你就迫使其成为有符号的字符型(水平太烂译的不好请见谅
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯