C语言入门系列:数据类型之字符

字符类型声明与初始化

在C语言中,使用char关键字来声明字符类型变量。例如:

char c = 'B'; // 声明并初始化字符变量c为'B'

此代码段展示了如何声明一个字符类型变量c并赋予其值B

字符与单引号

C语言要求字符常量必须被单引号包围,如 'B'

字符的内部表示

字符在计算机内用一个字节(8位)存储,被视为整数,遵循ASCII编码。例如,字符'B'对应整数66

本质上,字符只是一种视觉效果,计算机存储的不是字符本身,而是字符对应的编码,这个编码是一个整数,称之为码点

字符类型的范围

不同系统中,字符类型的默认范围可能为-128至127或0至255,均覆盖了标准ASCII码范围。

注意,最大不能超过255,超出这个范围,无法正常显示。

int main()
{
    char a = 266; 
    printf("这个字符是:%c\n", a); // 没有266对应的字符

    return 0;
}

运行这段代码,可能会得到警告。

在这里插入图片描述

整数与字符的互换性
char c = 66; // 整数赋值给字符变量
char c = 'B'; // 直接赋值字符

上述两行代码效果相同,说明字符和相应整数之间可以互换。

字符变量的数学运算

字符类型变量间可进行数学运算,如同整数操作:

char a = 'B'; // a = 66
char b = 'C'; // b = 67
printf("%d\n", a + b); // 输出字符B和C对应的整数和,即133

这里,ab相加的结果按整数输出。

注意,字符表示有符号整数时,最大不能超过127,字符声明时超出这个范围,会出现意外的结果。


int main()
{
    char a = 133; 
    char b = 133;
    printf("这个整数是 %d\n", a + b); 

    return 0;
}

对于上述代码,预期的结果是 266,但实际运行后的结果是 -246。

这是因为133已经超出了char类型的最大表示范围,计算时会溢出,溢出后a和b的值是 -123,所以计算结果是 -246。

133的溢出分析如下:

  • 133的补码是10000101。
  • 作为char类型,133超出范围,因为此时表示有符号整数,最高位(最左边的位)是符号位,1 表示这是一个负数。
  • 对于负数,剩余的位表示该数的补码形式。
  • 补码减一得到反码,10000101减1的结果是10000100,此即为反码。
  • 根据反码得到原码的过程是这样的:除符号位外,逐位取反。故10000100的原码是11111011。
    11111011是-123的原码,即10000101是负数-123的补码。
转义字符

特殊字符,如单引号,需用反斜杠\转义:

char t = '\''; // 使用转义表示单引号字符

控制字符如换行\n,可通过转义序列表示,用于控制输出格式或执行特定操作,主要用来表示 ASCII 码定义的一些无法打印的控制字符,它们也属于字符类型的值。

\a:警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生。
\b:退格键,光标回退一个字符,但不删除字符。
\f:换页符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于\v。
\n:换行符。
\r:回车符,光标移到同一行的开头。
\t:制表符,光标移到下一个水平制表位,通常是下一个8的倍数。
\v:垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列。
\0:null 字符,代表没有内容。注意,这个值不等于数字0。

八进制与十六进制表示字符

字符可以用八进制或十六进制表示:

char x = 'B';      // 直接字符赋值
char x = 66;       // 整数赋值
char x = '\102';  // 八进制表示字符B
char x = '\x42';  // 十六进制表示字符B

这四种方式都正确地初始化变量x为字符'B',展示了字符赋值的多样性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值