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. illegal multibyte sequence python3

    错误信息如下: page_data = m.decode('gbk') UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in positi ...

  2. golang语言中os/exec包的学习与使用

    package main; import ( "os/exec" "fmt" "io/ioutil" "bytes" ) ...

  3. JwtBearerAppBuilderExtensions.UseJwtBearerAuthentication(IApplicationBuilder

    netcore从1.1升级到2.0时,出的错,因为使用的时Jwt token参考https://github.com/aspnet/Security/issues/1310#issuecomment- ...

  4. 我的开发小tip

    开发原则:1.谁开发,谁负责到底.自己的开发的模块自己维护,不要让别人替你维护,否则很麻烦:2.合理分配时间3.谨慎的处理遇到的bug和问题,不是自己开发的不要轻举妄动,提交到待办中即可4.万勿过度设 ...

  5. HTML DOM 事件对象

    HTML DOM 事件对象 由 youj 创建,小路依依 最后一次修改 2016-08-04 HTML DOM 事件 HTML DOM 事件 HTML DOM 事件允许Javascript在HTML文 ...

  6. 解决Address is in use:Windows和Linux通过杀死进程

    在开发无卡支付系统的过程中,因为用了端口来监听服务,在调试程序的时候,忘了关,再次运行的时候会出现Address is in use的问题,即端口已经被绑定,无法再次使用,最直观的方法就是杀死之前的进 ...

  7. BZOJ1912或洛谷3629 [APIO2010]巡逻

    一道树的直径 BZOJ原题链接 洛谷原题链接 显然在原图上路线的总长为\(2(n-1)\). 添加第一条边时,显然会形成一个环,而这条环上的所有边全部只需要走一遍.所以为了使添加的边的贡献最大化,我们 ...

  8. qt 5.2.1类和模块的关系图

    QT│  ├─ActiveQt│  │  ActiveQt│  │  ActiveQtDepends│  │  ActiveQtVersion│  │  QAxAggregated│  │  QAxB ...

  9. PHD实时数据对象

    PHD实时数据库在化工制造业的应用 PISDK 开发包  电力企业信息化

  10. m序列c语言实现

    演示,不是算法 void m4() { int a[4]={1,0,0,1}; int m[15]; int temp; for(int i=0;i<15;i++){ m[i] = a[0]; ...