C语言中char类型中的有符号与无符号的区别和意义?

作者&投稿:郁软 (若有异议请与网页底部的电邮联系)
C语言中char型分有符号和无符号吗~

char的正式名称其实叫pure
char,C/C++标准规定char的类型是实现相关的,可以是signed
char,也可以是unsigned
char。一般编译器默认为signed
char,少数为unsigned
char。
所以,当你使用char的时候,最好确定无论是signed
char还是unsigned
char中你的代码都是正确的

首先,浮点类型都是有符号的,有无符号只是对于整形变量而言,每个无符号类型的级别都与对应的带符号类型相同,所以不能直接通过级数高低来转换(级数高低是long
double>double>float>long
long>long>int>short>char,),但是如果带符号类型的值域包含了无符号类型所表示的值,就把无符号转化为有符号类型,否则,两个操作数都转化为对应的无符号类型。求采纳~~

在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别。

      首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-127~127,unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。

      在实际使用过程种有什么区别呢?主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高位而已,在屏幕上面的显示可能不一样。

       二者的最大区别是:但是我们却发现在表示byte时,都用unsigned char,这是为什么呢?首先我们通常意义上理解,byte没有什么符号位之说,更重要的是如果将byte的值赋给int,long等数据类型时,系统会做一些额外的工作。如果是char,那么系统认为最高位是符号位,而int可能是16或者32位,那么会对最高位进行扩展(注意,赋给unsigned int也会扩展)而如果是unsigned char,那么不会扩展。最高位若为0时,二者没有区别,若为1时,则有区别了。同理可以推导到其它的类型,比如short, unsigned short,等等。

       具体可以通过下面的小例子看看其区别

  include <stdio.h>

  void f(unsigned char v)
  {
    char c = v;
    unsigned char uc = v;
    unsigned int a = c, b = uc;
    int i = c, j = uc;
    printf("----------------
");
    printf("%%c: %c, %c
", c, uc);
    printf("%%X: %X, %X
", c, uc);
    printf("%%u: %u, %u
", a, b);
    printf("%%d: %d, %d
", i, j);
  }
  

  int main(int argc, char *argv[])
  {
    f(0x80);
    f(0x7F);
    return 0;
  }


    结果输出如下:

    

    结果分析:

  对于(signed)char来说,0x80用二进制表示为1000 0000,当它作为char赋值给unsigned int或 int 时,系统认为最高位是符号位,会对最高位进行扩展。而0x7F用二进制表示为0111 1111,最高位为0,不会扩展。

  对于unsigned char来说,不管最高位是0,还是1,都不会做扩展。



char 是字符变量
比如
char a;
a="a";
就是定义字符变量a
字符变量a=字符a
用printf函数输出字符变量a就等于输出字符a
或者输出字符a所对应的un码或as码
这是根据输出函数参数来定的
如果真算有符号和无符号也就是
signed char a;
a="-a"?//*可以这样定义?*//
printf("%d/n",a);
如果编译器通过则分有无符号
不过我想编译器肯定不认识这段代码

char相当于signed char或者unsigned char,但是这取决于编译器!
这三种字符类型都是按照1个字节存储的,可以保存256个不同的值。
signed char取值范围是 -128 到 127
unsigned char 取值范围是 0 到 255

但是char究竟相当于signed char呢还是相当于unsigned char呢??
这就是char和int的不同之处!
int==signed int,但是char不能简单以为==signed char

要确定char究竟等同什么要基于不同的编译器做测试
(这里讲的比较详细
http://bbs.chinaunix.net/thread-889260-1-1.html


signed char -128-----127
unsigned char 0------255
就取值范围 不同
本人就这点 见解

无符号是字符


c语言中char是什么类型?
在C语言中,char是一种特殊的类型,专门用于表示字符变量。它不同于整型变量,char变量本质上是单个字符的存储,每个变量占用一个字节的内存空间。字符的值以ASCII码的形式存储,比如字符 'x' 的ASCII码是120,'y' 是121。当我们声明和赋值char变量,如char a, b; a='x'; b='y'; 实际上是将...

C语言中CHAR是什么类型变量
charch表示定义一个字符变量,变量名为ch。char表示字符型的数据类型,是C语言中的一个关键字,用来定义一个字符型数据类型(变量,数组或指针等)。举例如下:char ch='a'; \/\/ 定义一个字符类型的变量,并初始化为字符'a'printf("%c", ch); \/\/ 输出字符c ...

c语言char是什么意思(char是什么字符类型)
char str什么意思啊 charstr;\/\/表示声明一个char类型的名字为str的变量。char表示的是变量的类型为字符型。str表示的是字符类型变量的名字。char是什么字符类型 char是C\/C++整型数据。char型数据是计算机编程语言中只可容纳单个字符的一种基本数据类型,分为两种,一种是无符号整型数据类型(unsignedchar)...

c语言中char是什么类型?
char是基本类型中的字符类型。char是指使用指定长度的固定长度表示的字符串;比如char(8),则数据库会使用固定的1个字节(八位)来存储数据,不足8位的字符串在其后补空字符。

c语言char什么意思?
在C语言中,char是一种数据类型,用于存储单个字符。它通常占用一个字节的内存空间。下面是一个简单的示例代码,演示了如何使用char类型:在上面的代码中,我们定义了一个名为myChar的变量,它的类型是char,并将其初始化为大写字母A。然后,我们使用printf()函数输出变量的值。%c是一个格式说明符,...

char的范围是什么?
char是C语言中的一种基本数据类型,用于表示字符。它占用一个字节(8位),可以存储ASCII码对应的字符。二、char类型的取值范围 char类型可以取-128到127之间的整数值,包括负数和正数。这个范围是由char类型的编码方式决定的,常见的编码方式有ASCII码和Unicode码。1、ASCII码:ASCII码是一种字符编码标准...

C语言string和char有什么区别?
C语言string和char在字符类型、字符串类型等方面有区别。1、字符类型 char是字符类型,string是字符串类型。string可以看作是char组成的列表,在有些编程语言里没有char,只有string,例如python。如果单用引号来定义是字符类型还是字符串类型就会过于草率,因为不同的编程语言对引号的规定也不同。所以二者最...

什么是C语言中的char?
char是用于C或C++中定义字符型变量,只占一个字节,取值范围为-128 ~ +127(-2^7~2^7-1)。C语言中如int、long、short等不指定signed或unsigned时都默认为signed,但char在标准中不指定为signed或unsigned,编译器可以编译为带符号的,也可以编译为不带符号的。char类型占1字节 就是8位,所能...

char是什么类型啊?
1、char *p 表示字符型的指针(可以指向字符串)。2、char s[20] 表示字符数组,能存放20个字节的字符。C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了...

c语言中char表示什么
c语言中char表示基础类型的字符型。C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以...

石阡县17727302023: C语言中有符号和无符号是什么意思解释一下 -
典光复方: 在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别. 首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-127~127,unsig...

石阡县17727302023: C语言中的有符号和无符号是什么意思给仔细讲讲 -
典光复方: 譬如 char x;//是有符号,其能表示的整数大概 -127~+128 而 unsign char x;相当于将负数翻上来,只表示正数:0-255int x; //-32... +32... unsigned int x; //+65..... 更多交流,进我空间

石阡县17727302023: 在C语言中,unsigned char是什么类型? -
典光复方: unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型.整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号...

石阡县17727302023: c语言中signed 和unsigned是什么意思 -
典光复方: 1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数. 2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负. 3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用...

石阡县17727302023: c语言中字符变量用保留字什么来说明 -
典光复方: c语言中字符变量是用保留字char来说明的.

石阡县17727302023: c语言中char是什么意思 -
典光复方: 楼上完全是误导人,什么字符变量啊! char 是一个数据类型,作用才是定义字符型变量(单个或是字符串). 比方int 是整形数据,int a = 3;这里int 是类型, a 是整型变量,3是赋值; char s = 'A'; char是字符类型,s是字符型变量,A是赋值给变量s; char s[] = "c program"; char是字符类型,s[]是字符型数组,"c program"是赋给数组的值.

石阡县17727302023: 如何把char变成int C语言 -
典光复方: C语言中char类型本身就是整型类数据变量,可以直接赋值给int变量 char占一个字节内存空间,可表示的有符号数为-128~127,无符号数0~255 C语言中字符是按其ascii值进行存储的,如,字母'a',其实际存储在内存中的数据为97,只是在输出时,因格式串的不同,表现出来的形式不同: printf("%c", 'a' ); //按字符输出,显示a printf("%d", 'a'); //按整数输出,显示97 printf("%x", 'a'); //按16进制输出,显示61int占四字节内存空间,char赋值给int,系统自动进行高位补符号位,如,正数前补0,负数前补1.

石阡县17727302023: c 语言中 short long unsignedshort unsignedlong float double char 是什么意思 -
典光复方:这些都是C语言中的数据类型 short 短整型,long 长整型,unsigned short 无符号短整型,unsigned long 无符号长整型 float 单精度浮点,double 双精度浮点,char 字符类型

石阡县17727302023: c语言中char是什么类型? -
典光复方: char是容纳单字符的一种基本数据类型,不能存储汉字,(一个汉字占2字节) 存储字符串用string,其实String就是一个char的数组,不过它当中的元素多一个'\0'在数组的最后,表示结束 例如字符串abcd char a[]={'a','b','c','d','\0'}; 是等价的....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网