当前位置:  编程技术>c/c++/嵌入式

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

    来源: 互联网  发布时间:2014-10-12

    本文导语:  在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别。 首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-127~127,u...

在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

  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;
  }


结果输出如下:
 

结果分析:

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

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


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 苹果OS X和IOS下最新编程语言swift介绍
  • 谁能简单介绍一下LINUX上的各种语言脚本的功能.
  • PHP编程语言介绍及安装测试方法
  • 请各位推荐几本UNIX下C语言编程学习的书!!(电子书籍也可)最好能详细介绍文件操作的!!!万分感谢!!!
  • 数据库 iis7站长之家
  • 请介绍一两本精典的JSP书籍,我要去买了,已有JAVA语言基础!
  • 以NetBeans IDE为例介绍如何使用XML中Schema语言
  • 我是新手,,我想学习Java语言,但对它的用途还不了解,,能给介绍一下吗?谢谢!
  • HTML 脚本语言介绍及<script>标签用法
  • 详细介绍Python语言中的按位运算符
  • 对C语言中sizeof细节的三点分析介绍
  • c语言main函数使用及其参数介绍
  • C语言中字符串常用函数strcat与strcpy的用法介绍
  • c语言中数组名a和&a详细介绍
  • c语言中用位运算实现加法技巧介绍
  • Python语言技巧之三元运算符使用介绍
  • 基于c语言知识点的补遗介绍
  • Android 各国语言缩写及简称详细介绍
  • C语言之free函数以及野指针介绍
  • WQL语言简介和WQL测试工具wbemtest.exe使用方法详细介绍
  • C语言位运算符:与、或、异或、取反、左移与右移详细介绍
  • 2013年7月和2013年8月编程语言排行榜
  • 如何在GTK2.0下实现国际化(语言选择根据自己设置的语言,不用系统的语言)
  • 2017 年热门编程语言排行榜出炉,你的语言上榜没?
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • c语言实现MD5算法完整代码示例
  • C语言中间语言 CIL
  • c语言基于libpcap实现一个抓包程序过程
  • 最近学JSP,苦于HTML语言和JAVA语言太差,请教推荐几本书,thanks.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3