一 变量和常量
1.1 标识符
1、在我们所写的“第一个C程序”中出现了很多的标识符,例如include、main、printf、return。标识符是⽤来标识变量、函数,或任何其他⽤户⾃定义项⽬的名称。
2、标识符的约束规范:
- 只能包含数字、字母和下划线
- 不能以数字开头
- 区分大小写
1.2 关键字
1. 当我们在使用C语言进行编程时,某些标识符会被用来表示特殊的含义或者作用并且不能用作他
用,我们就称这些标识符为关键字。
2. C语言提供了32个关键字:
- 1) 数据类型关键字(12个)
- char、short、int、long、float、double、unsigned、signed、struct、union、enum、void
- 2) 控制语句关键字(12个)
- if、else、switch、case、default、for、do、while、break、continue、goto、return
- 3) 存储类关键字(5个)
- auto、extern、register、static、const
- 4) 其他关键字(3个)
- sizeof、typedef、volatile
1.3 C语言中的数据类型
在实际开发过程中我们需要处理各种类型的数据,C语言提供的数据类型如下图所示:
1.4 常量
- 在程序运行过程中,其值不能被改变的量
- 常量一般出现在表达式或赋值语句中
- 单引号是字符,双引号是字符串!!!
1.5 变量
变量的定义:
- 我们可以把变量理解为一个存储数据的容器
- 在程序运行过程中其值可以被改变
- 变量在使用前必须要被定义
- 变量定义的语法:type variable_list
- 在这⾥,type 必须是⼀个有效的 C 数据类型,可以是 char、int、float、double 或任何⽤
户⾃定义的对象,variable_list 可以由⼀个或多个标识符名称组成,多个标识符之间⽤逗号分隔。下⾯列出⼏个有效的声明:
- 在这⾥,type 必须是⼀个有效的 C 数据类型,可以是 char、int、float、double 或任何⽤
int i, j, k;
char c, ch;
float f, salary;
double d;
- 变量一旦被定义就在内存上占用了一块对应大小的空间
变量的命名规则:
- 遵循标识符的命名规范
- 不能使用关键字
- 见其名知其义,在实际开发过程中,我们一般建议使用英文单词或者英文单词的缩写作为变量名
常用变量名:
- tmp:临时变量
- cnt:计数器
二 整型:int
1. 各种整型类型的使用和对比
2. 可以通过 sizeof 关键字获取某个数据类型所占用的空间
printf("%d\n", sizeof(short)); //2
printf("%d\n", sizeof(int)); //4
printf("%d\n", sizeof(long)); //4
printf("%d\n",sizeof(long long)); //8
3. 字节(Byte)和比特(bit)
- bit位,即0或者1,0101010110
- Byte字节,8位比特作为一个字节,字节是处理数据的基本单位
- 1Byte= 8bits
- 1KB = 1024Bytes
- 1MB = 1024KB
- 1GB =1024MB
- 注意:B和b的区别
4. 数据总线
- 输出数据
- 总线的根数越多,数的表示范围也越大
5. 有符号数和无符号数取值范围
总结:软件开发过程中如果我们知道需要存储的数据不会为负数时,变量可以定义为无符号的整
数,这样可以扩大能够存储的最大正整数的值
6. 整型数据的表示
7. 整型数据的打印格式
#include <stdio.h>
int main()
{
short a = 10;
int b = 10;
long c = 10l; //或者10L
long long d = 10ll; //或者10LL
printf("sizeof(a) = %u\n", sizeof(a));
printf("sizeof(b) = %u\n", sizeof(b));
printf("sizeof(c) = %u\n", sizeof(c));
printf("sizeof(c) = %u\n", sizeof(d));
printf("short a = %hd\n", a);
printf("int b = %d\n", b);
printf("long c = %ld\n", c);
printf("long long d = %lld\n", d);
unsigned short a2 = 20u;
unsigned int b2 = 20u;
unsigned long c2= 20ul;
unsigned long long d2 = 20ull;
printf("unsigned short a = %hu\n", a2);
printf("unsigned int b = %u\n", b2);
printf("unsigned long c = %lu\n", c2);
printf("unsigned long long d = %llu\n", d2);
return 0;
}
三 字符型:char
1. 字符型变量用于存储一个单一字符
2. char 和 unsigned char 定义变量
3. 每个字符变量都会占用 1 个字节(1 Byte)
4. 用一对英文半角格式的单引号(' ')引用
5. 使用 %c 输出
#include <stdio.h>
int main()
{
char ch = 'A';
printf("char: %c\n", ch);
return 0;
}
6. 字符在内存中存储时是以这个字符的ASCII编码进行存储的:
- char的本质就是一个1字节大小的整型
char ch;
ch = 'A'; //ch
ASCII 码大致由以下两部分组成:
- ASCII 非打印控制字符: ASCII 表上数字 0-31 分配给了控制字符,用于控制打印机等一些外围设备。
- ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。数字 127 代表 Del 命令。
7. 大小写转换
- 大写转小写:+32 / +0x20
- 小写转大写:-32 / -0x20
#include <stdio.h>
int main(){
//字符型数据
char ch;
ch = 'A';
printf("char: %c\n", ch); //A
ch = 65;
printf("65: %c\n", ch); //A
printf("65: %d\n", ch); //65
printf("A : %c\n", 'A'); //A
printf("A -> a: %c\n", 'A'+32); //a
return 0;
}
8. 整数的字符形式
- 整数转字符形式: +48 / +'0'
- 字符形式转整数: -48 / -'0'
9. 转义字符
四 实型(浮点型):float、double
- 实型变量也可以称为 浮点型变量,浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比float 型变量更精确。
- 由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。
- 不以f结尾的常量是double类型,以f结尾的常量(如3.14f)是float类型。
#include <stdio.h>
int main()
{
//传统方式赋值
float a = 3.14f; //或3.14F
double b = 3.14;
printf("a = %f\n", a);
printf("b = %lf\n", b);
//科学法赋值
a = 3.2e3f; //3.2*1000 = 3200,e可以写E
printf("a1 = %f\n", a);
a = 100e-3f; //100*0.001 = 0.1
printf("a2 = %f\n", a);
a = 3.1415926f;
printf("a3 = %f\n", a); //结果为3.141593
return 0;
}
4.1 进制
进制也就是进位制,是人们规定的一种进位方法。 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
4.1.1 二进制
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。
- 当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
- 十进制转化二进制的方法:用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
- 十进制的小数转换成二进制:小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部
分,顺序看取整后的数就是转化后的结果。
五 计算机内存数值存储方式
1 在计算机系统中,数值一律用补码来存储。
2. 补码的特点
- 对于正数,补码就是原码(原始的二进制)
- 对于负数,其补码为它的反码加1
- 负数的反码:绝对值的原码取反
#include <stdio.h>
int main()
{
int a = -15;
printf("%x\n", a);
//结果为 fffffff1
//fffffff1对应的二进制:1111 1111 1111 1111 1111 1111 1111 0001
//符号位不变,其它取反:1000 0000 0000 0000 0000 0000 0000 1110
//上面加1:1000 0000 0000 0000 0000 0000 0000 1111 最高位1代表负数,就是-15
return 0;
}
3. 经典笔试题
int a = 5;
unsigned int b = a-10;
printf("%d\n", a > b);
六 关于printf(“%f\n”,3/2)
通过运行程序我们发现程序的输出结果是 0 !!
我们首先要明白一个问题,在C语言里面,除数和被除数都是整数的时候,商的类型也是个整数。
比如这里的3/2,得到的不是1.5,而是下取整之后的结果1。
我们知道整数1在内存中存储时的二进制为:0000 0000 0000 0000 0000 0000 0000 0001 ,可是
我们在输出结果时,计算机会将整个二进制当成浮点数来处理,那么问题来了:这个二进制所表示
的浮点数到底是多少呢?
下面,让我们来一起揭开浮点数存储的神秘面纱:
- 浮点数的存储遵循的是 IEEE754 标准,任意一个二进制浮点数可以表示成下面的形式:
6.1 例1
已经浮点数的二进制形式,计算浮点是的十进制值:
6.2 例2
已知一个十进制浮点数,计算二进制形式:
文章来源:https://www.toymoban.com/news/detail-489579.html
在了解了浮点数在内存中的存储方式了以后,下面我们来看看1的二进制如果转换成浮点数会
是多少呢?
显然,符号为0,那么s为0
阶码E也为0,则指数e = 阶码E - 127 = -127
M是多少呢,很显然是2的-23次方,约等于0
所以最终的结果就为0啦 ~文章来源地址https://www.toymoban.com/news/detail-489579.html
到了这里,关于01- 数据类型(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!