zoukankan      html  css  js  c++  java
  • C语言中char和unsigned char的区别

      在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义无符号类型,必须显式地在变量类型前加unsigned。

      char在我所用的linux中一般都是8位一个字节,表示范围为-128~127。

      unsigned char的表示范围为0~255。

      而ASCII的最大值是127。因此我们如果使用char去表示字符,那么char和unsigned char是没有区别的。

      当然如果去表示超过127的数,那么就会差别的。

    注意:

      如果直接用于数据传输,本质上unsigned char 和 char是没有区别的。。。因此传输过去的数据是什么,接收到的数据就是什么。

      但是如果数据要用于显示,那就有区别。比如0xFF,在unsigned char用printf打印出来是255,而char是-1。

      但是看过别人的一个博客,里面有指出,把一个char类型的变量赋值给int、long等数据类型或进行类似的强制类型转换时时,系统会进行类型扩展,这时区别就大了。对于char类型的变量,系统会认为最高位为符号位,然后对最高位进行扩展,即符号扩展。若最高位为1,则扩展到int时高位都以1填充。对于unsigned char类型的变量,系统会直接进行无符号扩展,即0扩展。扩展的高位都以0填充。所以在进行类似的操作时,如果char和unsigned char最高位都是0,则结果是一样的,若char最高位为1,则结果会大相径庭。

      以上转载自https://blog.csdn.net/guotianqing/article/details/77341657

      (注意:C语言中如果是有符号数,那么最高位为1时,表示负数)

      简单的来说就是当char和unsigned char都要强制转换成int类型(虽然正常也不会直接把unsigned char转换成int),这个时候如果两个最高位都是0,就都没问题。但是如果最高位都为1,那么char转换成int是没问题。但是unsigned char转换就会把最高位的1当做符号位。

      最简单的举例就是unsigned char:1000_0001,十进制就是129,那么转换成int类型后十进制就是-1。

      应该没人会这么干,但是也要注意一下。

     

  • 相关阅读:
    HTTP——Web服务器、代理、缓存
    nginx配置文件详解2
    nginx配置文件详解
    shell笔记2
    django笔记
    python 发请求,urllib,urllib2
    nginx配置
    python os模块学习
    mac 终端命令小结
    mac常用命令笔记
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/12106169.html
Copyright © 2011-2022 走看看