码迷,mamicode.com
首页 > 编程语言 > 详细

C语言中char和unsigned char的区别

时间:2019-12-27 11:57:25      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:就会   类型扩展   color   数据类型   ascii   最简   默认   nbsp   强制转换   

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

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

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

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

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

 

  但是看过别人的一个博客,里面有指出,把一个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。

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

 

 

C语言中char和unsigned char的区别

标签:就会   类型扩展   color   数据类型   ascii   最简   默认   nbsp   强制转换   

原文地址:https://www.cnblogs.com/zhuangquan/p/12106169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!