如下代码复制自https://blog.csdn.net/qq_30366449/article/details/77938870,是为了本身之后查看方便才复制过来的,谢谢原博主。c++
字符字面值通常是用一对单引号来表示。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变量用一个整形字面字初始化时,好比chard=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,如inth='abc';cout<<h;的结果是6382179。这个就须要好好解释下了,首先'a'的ASCII值是97,内存中占一个字节8位,就是01100001,b是01100010,c是01100011。因为int是32位的,不够的位用0补齐,在存入内存时,a是高位因此存到高地址位,c是低位因此存到低地址位,四个字节从低地址到高地址依次是
01100011
01100010
01100001
00000000spa
读取的时候跟存入的时候整好相反,先读高地址位,而后低地址位,也就是00000000 0110000101100010 01100011,这32位表明的十进制整型值整好是6382179。 .net