问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-23 15:05

我来回答

5个回答

热心网友 时间:2023-10-06 19:44

在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, %c\n", c, uc);
    printf("%%X: %X, %X\n", c, uc);
    printf("%%u: %u, %u\n", a, b);
    printf("%%d: %d, %d\n", 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,都不会做扩展。

热心网友 时间:2023-10-06 19:44

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

热心网友 时间:2023-10-06 19:45

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

热心网友 时间:2023-10-06 19:45

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

热心网友 时间:2023-10-06 19:46

无符号是字符
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...爱你你是我的罗密欧 , 我愿意变成你的朱丽叶' 谁知 有句歌词是“我爱你你是我的朱丽叶,我愿意变成你的梁山伯”是哪... 为什么打印出来的文档页码和原来的不一样 ...两台电脑用路由器上网一台是W7一台是XP如何实现两台电脑共享文件 win7怎么联另一台电脑win7怎么让网络和另一台电脑共享 w7的系统怎么共享电脑w7系统里面文件怎么共享另一台电脑 共享win7电脑w7系统里面文件怎么共享另一台电脑 翡翠有收藏价值吗,我们玩家如何去投资 价格一两万元的翡翠如何挑选 ppt怎么转换成视频?简单四步法,轻松搞定ppt微课录制 c++ 什么是有符号什么是无符号 C语言中的有符号类型和无符号类型有什么区别 C语言中有符号和无符号是什么意思解释一下 在计算机中,有符号数和无符号数的区别在哪? C语言有符号和无符号的有什么不同啊 C语言中的有符号和无符号怎么区别?什么意思? 西门子PLC基本数据类型有符号和无符号是什么意思 有符号整型和无符号整型怎么转换 二进制有符号无符号是什么意思?麻烦举例一下,谢谢 德弗变频器说明书? 德弗变频器5p零什么意思? 德弗变频器恢复出厂 德弗变频器 德弗DV300变频器点动快怎么了可以调慢? 德弗变频器显示SPO是什么意思? 浙江德弗变频器如何用上下键调赫兹? 德弗变频器 点动停机过快怎么调?调哪个参数?谢谢 德弗变频器怎么调j1j3的时间 德弗变频器怎么调转速 德弗变频器故障代码SP0是什么意思? 关于C语言中有符号型signed和无符号型unsigned的区别 有符号与无符号数之间的区别 C语言 c 判断变量是有符号数还是无符号数-判断标识符是有符号还是无符号 什么东西除锈最快效果最好? 去锈的方法有哪些? 怎样快速清除铁锈? 什么方法去铁锈快 铁三角at2020怎么固定在桌子上 铁三角at2020怎么样 铁三角At2020 这个电容麦怎么样 铁三角at2020和得胜sm18哪个好 铁三角at2020和babybottle6a哪个好 新买的AT2020 USB麦克风怎么用?需要驱动么? 铁三角 AT2020 录音室专业型话筒怎么样 铁三角AT2020录音室专业型麦克风和森海塞尔MK4哪个好 请教,我用铁三角at2020usb 这款麦克风录音,软件是cooledit 录音的时候,如何在耳机里听见自己的声音? 铁三角at2020和得胜gl400哪个好 铁三角AT2020 卡农接口的电容麦 怎么连接电脑啊?!!! 铁三角AT2020USB,录音声音小,正常放在电脑旁的距离,也没有麦克风增强,话筒上调节的按钮都弄 我的铁三角AT2020 USB麦克风录音效果很一般,还有些干扰现象,但网上示范的都很棒,是不是声卡不好?