🚩write in front🚩???
🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 &?星级博主~掘金?InfoQ创作者~周榜126﹣总榜960?全网访问量30w+🏅
🆔本文由 謓泽 原创 CSDN首发🙉如需转载还请通知?
📝个人主页-謓泽的博客_CSDN博客?📃
🎁欢迎各位→点赞👍 + 收藏?? + 留言📝?
📣系列专栏-【C语言】关键字_謓泽的博客-CSDN博客🎓
??我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
④?char??? 字符型
⒈描述 ??char?字符型变量是用来存储字符常量的变量,字符型变量在内存空间所占字节大小为1个字节,%c?所对应的是打印字符的格式数据,有符号(signed)的char取值范围是『?(负)128 ~ 127』无符号字符unsigned char的取值范围是『0~255』
⒉作用 ? 定义一个字符型变量的方法是使用关键字?char,例如:?char str?= 'A';
⒊注意 ? 字符数据在内存中存储的是字符的 ASCll?码,即使是一个无符号整数,其形式与整数的存储形式一样,因为在C语言的字符型数据与整形数据之间通用。
⒋实际上字符型是被称之为整形字符类型('单引号')如果不相信的话,你可以用sizeof关键字求下单引号字面值、常量看下它所在的字节大小是不是一个整形(④字节)的。
⒌拓展知识点 ? 相信学习过C++语言的小伙伴应该知道在C++语言当中它还是一个字节的。
#include <stdio.h>
int main(void)
{
char a = 'a';
printf("%c\n", a);
return 0;
}
🉑提醒一个新手容易所犯下的错误-字符也是区分大小写的。
#include <stdio.h>
int main(void)
{
char ch = 'A';
printf("%d\n", ch);
return 0;
}
🍊代码解析?例如ASCll码中整数65代表大写字母A。因此,存储字母A当中实际上存储的是整数65的值。当然,小写的A在ASCll码当中整数97代表小写字母a。
🍏拓展层面?数据类型中char是整数类型。同时也是一种特殊的类型字符,这是因为:可以用单引号表示字符常量如→'A'、'8',单引号' '也是一个字符。
🍅注? 在数据类型char当中的字符'1'和阿拉伯数字的①是不一样的。字符是字符,阿拉伯数字是整数,示例代码如下所示👇
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char a = '1';
printf("%d", a);
}
🖍运行结果→49?
📝解释?ASCll码的字符1对应着十进制的49,因为我们这里的是格式符是%d所以应该是字符转换十进制的形式
📑拓展知识点→我们可以通过一个程序看下char类型数字的1和char类型单引号的'1'是否是相等的。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char a = '1';
char b = 1;
printf("a = %d\n", a);
printf("b = %d\n", b);
if (a == b)
printf("YES\n");
else
printf("No\n");
return 0;
}
运行如下🖊
a? =? 49
b? =? 1
No
★上述代码总结就是字符类型'1'和整数类型也就是阿拉伯数字的①是不相等的。字符类型‘1’用ASCll码转换成数字比较的话它是④⑨的整形数字。
🍈题外知识点如下? 假设以 signed?char 为例。
0?000 0000 ??其中最高比特位是符号位『红色位符号位』从而意为着只有⒎个数值位。
假设,以原码位标准如下↓
1?111 1111? ?? -127
0?111 1111? ?? +127
1?→ 符号位表示负数、0?→ 符号位表示正数。负数是因为char实际上实际也是整形类型,而且是有符号的那么必然会出现负数的。
注?负数以补码为标准,正数原码、反码、补码、表达都是一样的。
📝说明?当 char 表示为负数也就是有符号的时候如下👇
表示的数字有2的七次方 2^7=128个 ,从 -127~-(负)0
其中-(负)0的原码是→1 000 0000??补码是→1 0000 0000,多出了一位比特位。
由于 char 只取 ⒏位,所以截断后变为 0000 0000,这与+0所表示的数是一样的,所以为了不能浪费 1000 0000 这个数值,我们规定用1 000 0000 这个位来表示 -128 的数字。