C语言中的 char, unsigned char, signed char

一、他们是什么?

signed char是有符号的,但是unsigned char没有符号,两者在存储上没有任何区别都是8位。

区别在于如何理解这两个byte,假设一种场景我们要将其赋值给一个int。

如果是signed char由于高位为符号位,那么会对最高位进行扩展,但是对于unsinged char不会进行扩展。

至于char是有符号还是无符号,要取决于具体的编译器。

二、三者的类型无法进行自动转换

假设我们使用template定义了一个fill函数,对于字符串类型C语言已经有了现成的实现memset函数,这里我们想调用它,也就是对于字符串我们打算将其定义为一个特例来处理。

template <class T>

void fille(Iterator<T> *begin,Iterator<T> * end,T t){

....

}

void fill(char * begin,char * end,char t){

  memeset(begin,end-begin,t);

}

void fill(unsigned char * begin,unsigned char * end,char t){

  memeset(begin,end-begin,t);

}

void fill(signed char * begin,signed char * end,char t){

  memeset(begin,end-begin,t);

}

这里的问题是为什么要定义三个,关键是这里的这三个函数是普通的函数,我们无法使用模板的特性,对于这样的普通函数要适应多种参数类型,只能是类型的自动转换,但是这三种char都无法进行自动转换,所以需要每个都要定义一个。

参考资料:

[1] http://www.cnblogs.com/qytan36/archive/2010/09/27/1836569.html

[2] http://blog.csdn.net/zx824/article/details/6884352

C++ char, unsigned char, signed char的更多相关文章

  1. char, signed char, and unsigned char in C++

    关于这三者的区别stackoverrflow里有一个答案是这样说的: 3.9.1 Fundamental types [basic.fundamental] 1 Objects declared as ...

  2. char、signed char 和 unsigned char 的区别

    ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char.而不是像short.int一样只有两种(int默认就是signed int). 三者都占1个字节( ...

  3. char , unsigned char 和 signed char 区别

    ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char.char相当于signed char或者unsigned char,但是这取决于编译器!这三种字符 ...

  4. char 、signed char、unsigned char

    看如下代码: char c = -1; signed char sc = -1; unsigned char uc = -1; printf("c=%d, sc=%d, uc=%d, cx= ...

  5. C 中 char、signed char 和 unsigned char 的区别

    C 中 char.signed char 和 unsigned char 的区别 来源:http://bbs.chinaunix.net/thread-889260-1-1.html 参考:https ...

  6. char、signed char、unsigned char的区别总结。

    转载地址:http://hi.baidu.com/thewillreigns/blog/item/67e665c4296e69c038db492d.html char 和 unsigned char是 ...

  7. C语言 1字节signed char的范围为什么是-128~127?

    参考 1. 关于 -128 ,+128,-0,+0,-1 的反码补码 | 博客园 2. 八位二进制数为什么表示范围(-128~~+127)理解 | 博客园 无符号单字节范围 无符号单字节unsigne ...

  8. char和signed char不同编译器下的使用反思

    遇到一个问题,在使用一个算法的时候出现了仿真正常,但是在使用时出现函数的返回数据只有正值的异常. 在定位算法问题的时候,由算法函数最后的返回值由后向前推,最后发现问题在与char类型的值在不同编译器下 ...

  9. signed char、unsigned char

    什么是无符号char类型?与常见的char类型有何不同? 在c++中有三种不同的字符类型:char,signed char,unsigned char.如果要应用与文本字符,就使用不加限制的char类 ...

  10. Integral Promotions整数提升和符号扩展(char,unsigned char,signed char)

    以下来自msdn: Objects of an integral type can be converted to another wider integral type (that is, a ty ...

随机推荐

  1. 34-BigInteger详解

    在用C或者C++处理大数时感觉非常麻烦,但是在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数, ...

  2. MySQL 中的数据类型介绍(转)

    据我统计,MySQL支持39种(按可使用的类型字段统计,即同义词也作多个)数据类型.下面的介绍可能在非常古老的mysql版本中不适用. 转载出处:http://blog.csdn.net/anxpp/ ...

  3. docker-ce-17.09 镜像获取,创建,删除,保存

    一.安装docker的文档地址: https://docs.docker.com/engine/installation/linux/centos/ 二.安装docker 1.通过yum进行安装 &g ...

  4. 梦殇 chapter six

    如行尸走肉般的坐在教室,看著书上密密麻麻的字,心却久久不能平静. 自己已经不再是当初那个懵懂,无知的小女孩了.仰望天空45度,让眼泪流回眼睛. 是该告别彷徨,告别懵懂的年纪了. 早些年许下的诺言,如今 ...

  5. Jenkins发送邮件,邮件正文嵌套的html中文显示乱码

    解决方案: 1.添加系统变量.变量名:JAVA_TOOL_OPTIONS变量值:-Dfile.encoding=UTF8 2.打开jenkins,系统管理--系统设置,在全局属性处勾选Environm ...

  6. Linux_(3)Shell编程(上)

    一.shell 简介Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...

  7. Get、Post 提交的乱码问题

    1.问题 在spring mvc开发的时候出现乱码问题: 2.解决方案 (1)Get提交:tomcat容器接收的造成的乱码问题,修改server.xml文件: (2)Post提交:在web.xml中配 ...

  8. BZOJ1226或洛谷2157 [SDOI2009]学校食堂

    BZOJ原题链接 洛谷原题链接 注意到\(B[i]\)很小,考虑状压\(DP\). 设\(f[i][j][k]\)表示前\(i - 1\)个人已经拿到菜,第\(i\)个人及其后面\(7\)个人是否拿到 ...

  9. 常用到的photoshop实用设计功能都在这了!

    常用到的photoshop实用设计功能都在这了!赶快收藏学起来,需转不谢~ ​ 编辑:千锋UI设计

  10. phantomjs问题收集

    1. phantomjs如果遇到重定向的url,两个页面都会加载,onInitialized只会执行一次,onResourceReceived会执行两次.我试过在onInitialized加一段代码, ...