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. tomcat 启动日志乱码

    打开cd到tomcat/conf/目录下 修改logging.properties 找到 java.util.logging.ConsoleHandler.encoding = utf-8这行 更改为 ...

  2. Android studio实现简单的CRUD

    1.打开Android studio ,创建项目DataBase01 2.进行UI设计,如图 目的:实现对姓名及其爱好的增删改查 3.创建DB.java,用于创建数据库,并做相关操作 在该目录下右键- ...

  3. awk参数解析

    # awk --help Usage: awk [POSIX or GNU style options] -f progfile [--] file ... Usage: awk [POSIX or ...

  4. PHP守护进程化

    什么是守护进程? 一个守护进程通常补认为是一个不对终端进行控制的后台任务.它有三个很显著的特征:在后台运行,与启动他的进程脱离,无须控制终端.常用的实现方式是fork() -> setsid() ...

  5. java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet解决

    spring配置之后启动报错,如下: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServl ...

  6. git中 vi/vim的命令

    一.vi & vim 有两种工作模式: 1.命令模式:接受.执行 vi操作命令的模式,打开文件后的默认模式: 2.编辑模式:对打开的文件内容进行 增.删.改 操作的模式: 在编辑模式下按下ES ...

  7. 浏览器与服务器交互原理以及用java模拟浏览器操作v

    浏览器应用服务器JavaPHPApache * 1,在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, * 简单的讲,当浏 ...

  8. 5F - Coin Change

    Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make c ...

  9. andorid 对话框

    activity_ui2.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  10. Activity和Intent