字符字面值一般是用一对单引号来表示。char类型一般就是用字符字面值来初始化、赋值。由于char类型的是单字节长度,当给char类型的变量用字符字面值赋值时,当单引号里面的内容超过一个字节时,系统会自动截取一个字节的内容给char变量,忽略其他的字节内容。
    比如char a='1234';c++会认为单引号里的每一个数值都看做一个字符字面值,也就是说1 2 3 4各占一个字节,'1234'也就是一共占4个字节,然而char变量a只是占一个字节,初始化它的值却有4个字节,系统要从'1234'中截取一个字节的内容给a,然而是截取'1'给a吗?不是,是把'4'给a。因为在x86平台(http://baike.baidu.com/view/339142.htm)上,数据是以little-endian(http://baike.baidu.com/view/2368412.htm)的形式排列的,低位字节放在内存的低地址,高位字节放在内存的高地址。我们看'1234',从左到右从1到4,然而在计算机中存放的格式是从0x04到0x01,就是说'1234'的低位4存放在计算机的内存低地址位,'1234'的高位1存放在内存的高地址位,所以当把'1234'给变量a时,系统把内存中的地址中存放的4给a,其余的全部不要了。
再如:char b='啊';由于一个汉字是双字节的,系统会截取其中一个字节给char,但鬼才知道截取的那个字节是什么,所以cout<<b时会出现乱码。
当给char变量赋值正确的用ASII表中的字符,比如char c='!',单引号里面的内容是什么,cout就会输出什么。
当给char变量用一个整形字面字初始化时,比如char d=55,这时系统会根据在ASII表中这个整型值代表的控制字符是什么,就会输入什么,比如在ASii表中55是'7'的ASII值,cout<<d;的结果就是7。char对应ascii值如果是可显示字符就可以输出来,如果是不可显示字符,就输不出来.就好像0x0D和0x0A它们分别表于回车符和换行符,但是在它们本身没有一个形状能表示这些字符得,就没办法显示出来了.
然而ASCII表中只有0到127这128种,如果当大于127的整数甚至是大于255给char时,系统的运行结果未知。
字符串字面值,也就是双引号来定义的,一般称作为c风格字符串,他的类型应该是char*,所以char e="t";是会发生编译错误的。
对于int变量,int f=10;自然是正确的,这不用多解释了。然而如果把一个字符字面值给int,如int g='a',会把字符a在ASCII表中的ASCII值(也就是97)给a,cout<<g;的结果就是97。
如果把一个多字符字面值给int,如int h='abc';cout<<h;的结果是6382179。这个就需要好好解释下了,首先'a'的ASCII值是97,内存中占一个字节8位,就是01100001,b是01100010,c是01100011。由于int是32位的,不够的位用0补齐,在存入内存时,a是高位所以存到高地址位,c是低位所以存到低地址位,四个字节从低地址到高地址依次是
01100011
01100010
01100001
00000000
读取的时候跟存入的时候整好相反,先读高地址位,然后低地址位,也就是00000000 01100001 01100010 01100011 这32位代表的十进制整型值整好是6382179。

C/C++ char和int的区别的更多相关文章

  1. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  2. (int)、(int&)和(int*)的区别(转)

    (1).首先通过一个例子看(int)和(int&)的区别: float a = 1.0f;cout << (int)a << endl;cout << (i ...

  3. C语言scanf与get char,gets的区别

    C语言scanf与get char,gets的区别 1.scanf() scanf是C语言的格式输入函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并 ...

  4. C语言补漏(1)--- char到int赋值的一个陷阱

    作为一个C的新手(虽然学的第一门语言就是C,可是用C实际开发项目却是最近的事情),对使用C过程中遇到的各类问题.疑惑.知识漏洞进行弥补无疑是非常有必要的,于是决定将每次遇到的知识漏洞写到博客上. 今天 ...

  5. Java|从Integer和int的区别认识包装类

    https://blog.csdn.net/darlingwood2013/article/details/96969339?utm_medium=distribute.pc_relevant.non ...

  6. char,short ,int ,long,long long,unsigned long long数据范围

    from:http://www.cnblogs.com/A123456A/archive/2013/01/25/2876634.html char,short ,int ,long,long long ...

  7. C++ 中 char 与 int 转换问题

    itoa 功  能:把一整数转换为字符串 函  数:char *itoa(int value, char *string, int radix); 解  释:itoa 是英文integer to ar ...

  8. 一段代码了解Java中char和int的转换

    题目要求: 将输入的大写字母转成对应小写的后5个,如A转换后为f:如果转换后大于z则从a重新计,即多出1就转成a,多出2就转成b以此类推. Java代码: ```java private static ...

  9. TEXT、TINYTEXT、MEDIUMTEXT、LONGTEXT选择 和 char varchar varchar2 的区别

    TEXT.TINYTEXT.MEDIUMTEXT.LONGTEXT选择: 储存不区分大小写的字符数据 TINYTEXT 最大长度是 255 (2^8 - 1) 个字符. TEXT 最大长度是 6553 ...

随机推荐

  1. 转:窗口启用/禁用功能函数EnableWindow的使用

    在非MFC环境中如何使控件或者窗口禁用呢?起初是想通过发送消息来实现,但找来找去都木有找到控件禁用的消息(也是是博主木有找到的缘故),所以只能另辟蹊径,使用 EnableWindow这个函数, 该函数 ...

  2. Javascript OrderBy

    要在js 实现orderBy基本知识就是 array.sortarray.sort(function(a,b){ a 表示 row 0 b 表示 row 1 它会loop多次你可以比较 if(a &g ...

  3. 人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五)

    原文:人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五) 前面4篇文章说的是模糊系统,它不同于传统的值逻辑,理论基础是模糊数学,所以有些朋友看着有点迷糊,如果有兴趣建议参 ...

  4. java中jsoup框架解析html

    今天遇到对网页内容进行操作,思考了一下,先获取连接后的html内容,然后对html文档进行操作呗.思路没有问题,但是问题还是不少.于是便找到了jsoup这个神器了... 1.什么是jsoup? 百度百 ...

  5. Graphviz-Gdot语言学习

    GVEdit这个绘图软件呢我也是刚接触的,感觉画起图来还是很爽的...尤其很熟悉c++后很容易上手这门dot语言. 先看一下十分清新的编程界面: 没有天下最邪恶的语法加亮,没有缩进行...这又算什么! ...

  6. java中 SSL认证和keystore使用

    java中 SSL认证和keystore使用 2013-10-12 11:08 10488人阅读 评论(0) 收藏 举报   目录(?)[+]     好久没用过SSL认证了,东西久不用,就有点生疏. ...

  7. sqlyog v11.24注册码

      ccbfc13e-c31d-42ce-8939-3c7e63ed5417 a56ea5da-f30b-4fb1-8a05-95f346a9b20b a0fe8645-3916-45d4-9976- ...

  8. 类型兼容原则(C++)

    类型兼容原则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代. 通过公有继承,派生类得到了基类中除构造函数.析构函数之外的所有成员.这样,公有派生类实际具备了基类的所有功能,凡是基类能解 ...

  9. Node.js 博客实例(六)留言功能

    原教程https://github.com/nswbmw/N-blog/wiki/_pages的第六章,因为版本号等的原因,在原教程基础上稍加修改就可以实现. 实现用户给文章留言的功能,留言保存在数据 ...

  10. [Angular 2] Interpolation: check object exists

    In Angular2, sometime we use @Output to pass data to parent component, then parent may pass the data ...