1.char的定义
C标准中对char是 Impementation Defined,就是未明确定义
(1)那它由什么定义?坦白说,具体的编译器明确定义,一般都是用signed char或unsigned char来实现char的,也就是说不同的编译器对char是什么定义不一样
(2)为什么要这样定义?因为这三种类型的对象在存储介质中的表现形式是一样的(都是一个占8bit的01串,只是解析的时候不同)
(3)到底是signed char还是unsigned char?这得看编译器:VC编译器、x86上的GCC都把char定义为signed char,而arm - linux - gcc却把char定义为 unsigned char
2.char的使用
char的不同使用给了它不同的字面上的含义
(1)当字符用
原始的ASCII标准里,定义的字符码值是只有0~127,所以怎么定义的char都刚好好装得下,于是普通意义上我们对它的理解就是它表示一个字符,也就是让表示一个ASCII码(这也是C语言基础中对它的解释)
(2)当单字节整数
从本质上来说,字符('a', 'b', 'c'等)本质上也是一个整数,只是字符代表的值是0~127,我们可以用char表示一个不太大的整数
char c = -1;
printf("%d\n", c);
输出结果为-1char c = 1 表示ASCII码=1的字符
char c = "1" 语法错误
char c = '1' 表示1这个字符
#include<stdio.h>
int main()
{
char a=1,b='1';
printf("%c %c\n",a,b);// 输出ASCII为1的字符和字符'1'
return 0;
}
ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共定义了128个字符,其中33个字符无法显示(这是以现今操作系统为依归,但在DOS模式下可显示出一些诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符,控制字符的用途主要是用来操控已经处理过的文字,在33个字符之外的是95个可显示的字符,包含用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。
C/C++高位扩展:
高位扩展既是从低位数数据(比如int)转换到高位数数据(long long)时发生的。高位数数据的低位就是原来的低位数数据,那么高位呢?
原来以为高位统统补0就好了,但是实际上不是这样的。如果低位数数据是有符号数,会按照低位数数据的最高位拓展,比如32位 - 1(0xFFFFFFFF)会扩展为64位0xFFFFFFFFFFFFFFFF。而如果低位数数据是无符号数,那么直接补0。