手机
当前位置:查字典教程网 >编程开发 >C语言 >基于C语言char与unsigned char的区别介绍
基于C语言char与unsigned char的区别介绍
摘要:在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed)char与unsignedchar之间的区别。首先在...

在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("----------------n");

printf("%%c: %c, %cn", c, uc);

printf("%%X: %X, %Xn", c, uc);

printf("%%u: %u, %un", a, b);

printf("%%d: %d, %dn", i, j);

}

int main(int argc, char *argv[])

{

f(0x80);

f(0x7F);

return 0;

}

结果输出如下:

基于C语言char与unsigned char的区别介绍1

结果分析:

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

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

【基于C语言char与unsigned char的区别介绍】相关文章:

C++中delete和delete[]的区别详细介绍

深入c语言continue和break的区别详解

C++开发:为什么多线程读写shared_ptr要加锁的详细介绍

探讨register关键字在c语言和c++中的差异

c语言冒泡排序法代码

c语言中return与exit的区别浅析

c语言printf函数的使用详解

C语言中基础小问题详细介绍

如何用C语言去除字符串两边的空字符

内核线程优先级设置的方法介绍

精品推荐
分类导航