-
2021-11-29 09:43:58更多相关内容
-
C语言数据类型与三大结构
2021-01-07 22:30:01C语言数据类型与三大结构 数据类型 C语言数据类型可以分为基本类型和派生类型。 基本类型:整型,字符型,浮点型,布尔型。 派生类型:指针类型,枚举类型,数组类型,结构体类型,共用体类型 在不同的编译器环境... -
C语言数据类型及取值范围.doc
2020-05-18 00:25:17C语言数据类型及取值范围 -
C语言数据类型
2018-09-12 15:10:25数据类型包括原始类型、多元组、记录单元、代数数据类型、抽象数据类型、参考类型以及函数类型。本文主要以51单片机中的数据类型为中心而展开的话题。 在keil C51或者iar for c8051编译器下: int 占两个字节 ...数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。数据类型包括原始类型、多元组、记录单元、代数数据类型、抽象数据类型、参考类型以及函数类型。本文主要以51单片机中的数据类型为中心而展开的话题。
在keil C51或者iar for c8051编译器下:
int 占两个字节 范围:-32768~+32767
long占四个字节 范围:-2147483648~+2147483647
float占四个字节 范围:3.40E+38 ~ +3.40E+38
double占8个字节 范围:-1.79E+308 ~ +1.79E+308
在标准C语言中,存在着如下六种基本数据类型:
1、char:字符型;
2、short = short int:短整型
3、int:整型
4、long = long int:长整型
5、float:单精度浮点型
6、double:双精度浮点型
而面向51单片机的Keil uVision4对此进行了简化,因此,可以理解为只存在如下四种基本数据类型:
1、char:字符型
2、int = short = short int:整型
3、long = long int:长整型
4、float = double:单精度浮点型
其中,基本整型数据类型又可以通过signed关键词扩展为有符号的signed char、signed int、signed long类型,或通过unsigned关键词扩展为无符号的unsigned char、unsigned int、unsigned long类型;而对于不加关键词扩展的char、int、long本身,Keil uVision4则一律认为是signed类型。
应对51单片机硬件的一些特点,Keil uVision4还扩展了bit、sbit、sfr、sfr16等四种特殊基本数据类型,它们都是标准C中所没有的。其中:
1、bit:声明一个普通的位变量。例如:“bit flag;”。
2、sbit:声明特殊功能寄存器中的某一位。例如,使用“sbit TI = SCON^0;”,就声明了TI为特殊功能寄存器SCON的第0位。
3、sfr:声明一个8位寄存器为特殊功能寄存器。例如,将51单片机内存地址0x98处的存储单元声明为8位特殊功能寄存器SCON,可以使用“sfr SCON = 0x98;”语句。
4、sfr16:声明一个16位的寄存器为特殊功能寄存器。为了将51单片机内存地址0xCC处开始的连续两个存储单元声明为一个统一的16位特殊功能寄存器T2,可以使用“sfr16 T2 = 0xCC;”语句。
需要注意的是,在Keil uVision4中,用sbit、sfr、sfr16声明特殊功能寄存器变量或特殊功能寄存器位变量时,其声明语句都只能放在函数外,而不能放在函数内,否则出现语法错误;而用bit声明普通位变量时,声明语句既可放在函数外,也可放在函数内。此外,bit、sbit、sfr、sfr16都不支持指针和数组扩展,因此,不能定义bit、sbit、sfr、sfr16型指针和数组。当然,根据C语言标准,无论是sbit、sfr、sfr16还是bit,变量必须在使用之前(至少在使用之时)声明:这一点是显然的。
对于初学者来说,其实没有必要深究sbit、sfr、sfr16的用法,它们通常用在51单片机的系统自带头文件中,一般情况下无需用户关心。
表1整理了Keil uVision4支持的各种基本数据类型和属性,希望读者认真理解和领会。
51单片机数据类型
从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率。
在51系列中data,idata,xdata,pdata的区别:
1、data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
2、idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:moxACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)
3、 xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
4、 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movxACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。
当然现在有些51单片本身内部就有扩展的RAM区域,故在允许使用内部扩展RAM的时候 使用xdata 和pdata并不影响P2和P0口。
单片机C语言unsigned char code table[] code 是什么作用?
code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。
程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。
bdata如何使用它呢?
若程序需要8个或者更多的bit变量,如果你想一次性给8个变量赋值的话就不方便了,(举个例子说说它的方便之处,想更深入的了解请在应用中自己琢磨)又不可以定义bit数组,只有一个方法
char bdata MODE;
sbit MODE_7 = MODE^7;
sbit MODE_6 = MODE^6;
sbit MODE_5 = MODE^5;
sbit MODE_4 = MODE^4;
sbit MODE_3 = MODE^3;
sbit MODE_2 = MODE^2;
sbit MODE_1 = MODE^1;
sbit MODE_0 = MODE^0;
8个bit变量MODE_n 就定义好了
这是定义语句,Keilc 的特殊数据类型。记住一定要是sbit
不能 bit MODE_0 = MODE^0;
赋值语句要是这么些C语言就视为异或运算
空间名称地址范围说明:
1、DATAD: 00H~7FH片内RAM直接寻址区。
2、BDATAD: 20H~2FH片内RAM位寻址区。
3、IDATAI: 00H~FFH片内RAM间接寻址区。
4、XDATAX: 0000H~FFFFH64KB常规片外RAM数据区。
5、HDATAX: 0000H~FFFFFFH16MB扩展片外RAM数据区。
6、CODEC: 0000H~FFFFH64K常规片内外ROM代码区。
7、HCONST(ECODE)C: 0000H~FFFFFFH16MB扩展片外ROM常数区(对Dallas390可用作代码区)。
8、BANK0~BANK31B0: 0000H~FFFFH::B31:0000H~FFFFH分组代码区,最大可扩展32X64KB ROM。
8051单片机的存储器结构
MCS-51单片机在物理结构上有四个存储空间:
1、片内程序存储器
2、片外程序存储器
3、片内数据存储器
4、片外数据存储器
但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:
1、片内外统一编址的64K的程序存储器地址空间(MOVC)
2、256B的片内数据存储器的地址空间(MOV)
3、以及64K片外数据存储器的地址空间(MOVX
程序内存ROM
寻址范围:0000H ~ FFFFH 容量64KB
EA = 1,寻址内部ROM;EA = 0,寻址外部ROM
地址长度:16位
作用: 存放程序及程序运行时所需的常数。
七个具有特殊含义的单元是:
0000H —— 系统复位,PC指向此处;
0003H —— 外部中断0入口
000BH —— T0溢出中断入口
0013H —— 外中断1入口
001BH —— T1溢出中断入口
0023H —— 串口中断入口
002BH —— T2溢出中断入口
内部数据存储器RAM
物理上分为两大区:00H ~ 7FH即128B内RAM 和 SFR区。
作用:作数据缓冲器用。
下图是8051单片机存储器的空间结构图
程序存储器
一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
当=1时,程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间。 当=0时,程序从外部存储器开始执行,例如前面提到的片内无ROM的8031单片机,在实际应用中就要把8031的引脚接为低电平。
8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意:
其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。
另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:
0003H—000AH 外部中断0中断地址区。
000BH—0012H 定时/计数器0中断地址区。
0013H—001AH 外部中断1中断地址区。
001BH—0022H 定时/计数器1中断地址区。
0023H—002AH 串行中断地址区。
可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。从上面可以看出,每个中断服务程序只有8个字节单元,用8个字节来存放一个中断服务程序显然是不可能的。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,我们是在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU读到这条转移指令,便转向其他地方去继续执行中断服务程序。
下图是ROM的地址分配图:
从上图中大家可以看到,0000H-0002H,只有三个存储单元,3个存储单元在我们的程序存放时是存放不了实际意义的程序的,通常我们在实际编写程序时是在这里安排一条ORG指令,通过ORG指令跳转到从0033H开始的用户ROM区域,再来安排我们的程序语言。从0033开始的用户ROM区域用户可以通过ORG指令任意安排,但在应用中应注意,不要超过了实际的存储空间,不然程序就会找不到。
数据存储器
数据存储器也称为随机存取数据存储器。数据存储器分为内部数据存储和外部数据存储。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),片外最多可扩展64KB的RAM,构成两个地址空间,访问片内RAM用“MOV”指令,访问片外RAM用“MOVX”指令。它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即: 数据存储器空间(低128单元); 特殊功能寄存器空间(高128单元);
这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。下面我们就来详细的与大家讲解一下:
低128单元:
片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,R0、R1和DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器,即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KB。也就是说在寻址片外数据存储器时,寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器。
从上图中我们可以看到,8051单片机片内RAM共有256个单元(00H-FFH),这256个单元共分为两部分。其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。
1、通用寄存器区(00H-1FH)
在00H—1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0—R7来命名,我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器——程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的D3和D4位(RS0和RS1),即可选中这四组通用寄存器。对应的编码关系如下表所示。惹程序中并不需要用4组,那么其余的可用做一般的数据缓冲器,CPU在复位后,选中第0组工作寄存器。
2、位寻址区(20H-2FH)
片内RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。位地址分配如下表所示:
CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。
3、用户RAM区(30H-7FH)
在片内RAM低128单元中,通用寄存器占去32个单元,位寻址区占去16个单元,剩下的80个单元就是供用户使用的一般RAM区了,地址单元为30H-7FH。对这部份区域的使用不作任何规定和限制,但应说明的是,堆栈一般开辟在这个区域。
-
C语言 数据类型详细介绍
2020-09-01 21:21:55本文主要讲解C语言 数据类型,这里整理了详细的数据类型的资料,希望能帮助刚刚开始学习C语言的同学 -
C语言数据类型中的基本类型
2021-05-22 13:03:26C语言中的数据类型有很多种,具体分类如下图所示。从图中可以看出,C语言中的数据类型可分为 4 种,分别是基本类型、构造类型、指针类型、空类型。下面我们将针对基本数据类型进行详细地讲解。整型变量在程序开发中...变量的数据类型
在应用程序中,由于数据存储时所需要的容量各不相同,因此,为了区分不同的数据,需要将数据划分为不同的数据类型。C语言中的数据类型有很多种,具体分类如下图所示。
从图中可以看出,C语言中的数据类型可分为 4 种,分别是基本类型、构造类型、指针类型、空类型。下面我们将针对基本数据类型进行详细地讲解。
整型变量
在程序开发中,经常会遇到 0 、-100 、1024 等数字,这些数字都可称为整型。整型就是一个不包含小数部分的数。在 C 语言中,根据数值的取值范围,可以将整型定义为短整型(short int)、基本整型(int)和长整型(long int)。下面列举了整数类型的长度及其取值范围。
从表中可以看出,整数类型可分为 short 、int 和 long ,这三种类型可以被 signed 和 unsigned 修饰。其中,被 signed 修饰的整数类型称为有符号的整数类型,被 unsigned 修饰的称为无符号的整数类型。它们之间最大的区别是无符号类型可以存放的正数范围比有符号类型中的范围大一倍。例如,int 的取值范围是-231~231-1,而 unsigned int 的取值范围是 0~232-1。默认情况下,整型数据都是有符号的,此时signed修饰符可以不用写。
需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型,short 类型整数的长度不能短于 int 类型。
刚刚我们了解了不同整数类型数据的取值范围,接下来我们通过一个案例来具体了解下:
#include
int main()
{
int a = {{12345:0}};
long b = -{{23456:0}}, sum1;
unsigned int c = {{32800:0}}, sum2;
sum1 = b - a;
sum2 = c - b;
printf("sum1=%ld,sum2=%ld\n",sum1,sum2);
return 0;
}
运行结果如下图所示:
结果是-{{35801:0}},无符号整数类型 sum2 的结果是 {{56256:0}}。
实型变量
实型变量也可以称之为浮点型变量,浮点型变量是用来存储小数数值的。浮点型变量分为两种:单精度浮点数(float)、双精度浮点数(double),不过 double 型变量所表示的浮点数比 float型变量更精确。
上表中,列出了两种浮点数类型变量所占的空间大小和取值范围。在取值范围中,E表示以 10 为底的指数,E后面的“+”号和“-”号代表正指数和负指数,例如,1.4E-45表示 1.4*10-45。为了让读者更好地理解浮点型数据在内存中的存储方式,接下来以单精度浮点数为例进行详细讲解,如下图所示。
在图中,浮点数包含符号位、小数位和指数位三部分。例如,小数 3.{{14159:0}}在内存中的符号位为“+”,小数部分为.{{31415:0}},指数位为1,连接在一起即为“+0.{{314159:0}} * 101= 3.{{14159:0}}”。在 C语言中,一个小数会被默认为 double类型的值,因此在为一个 float 类型的变量赋值时需要注意一点,所赋值的后面一定要加上字母“F”(或者小写“f”),而为 double类型的变量赋值时,其所赋值后面的字符“D”(或小写“d”),可以省略。具体示例如下:
float f = 123.4f; //为一个 float 类型的变量赋值,后面必须加上字母 f
double d1 = 100.1; //为一个 double 类型的变量赋值,后面可以省略字母 d
double d2 = 199.3d; //为一个 double 类型的变量赋值,后面可以加上字母 d
另外,在程序中也可以为一个浮点数类型变量赋予一个整数数值,示例如下:
float f = 100; //声明一个 float 类型的变量并赋整数值
double d = 100; //声明一个 double 类型的变量并赋整数值
重要知识点:float和 double之间的数据转换
由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。例如,将 3.{{1415926:0}}赋给一个 float型变量,但它只能保证前 7 位是有效的。
如下面的案例所示:
#include
int main()
{
float a;
a = 3.{{141592612:0}};
printf("a=%f\n",a);
return 0;
}
运行结果如下图所示:
从图中可以看出,程序运行结果为 3.{{141593:0}}。我们会发现该输出的值与给定的值之间有一些误差。这是由于 a是单精度浮点型变量,它只能提供 7 位有效数字,而 3.{{141592612:0}}已经超出了其取值范围,所以后面的几位被舍去了。
字符型变量
字符型变量用于存储一个单一字符,在 C语言中用 char 表示,其中每个字符变量都会占用 1个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来。
例如,'A'的声明方式如下所示:
char ch = 'A'; //为一个 char 类型的变量赋值字符'a'
上述代码中,将字符常量 'A '放到字符变量 ch 中,实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII编码放到变量的存储单元中。例如:ASCII使用编号 65来对应大写字母“A”,实际上变量 ch存储的是整数 65,而不是字母“A”本身。
接下来通过一个案例来说明:
#include
int main()
{
char ch1 = 'A';
char ch2 = 65;
printf("%c\n",ch1);
printf("%c\n",ch2);
return 0;
}
行结果如图所示:
上例中,定义了两个 char 类型变量,分别赋值为字符 'A' 和数字 65,然后通过 printf函数把两个变量的内容以字符形式打印到屏幕上。从图中可以看出,两个变量输出的结果是一样的,这说明对于字符型来说,A和 65其实没什么区别。严格来说,字符类型也是整型类型。
需要注意的是,除了可以直接从键盘上输入的字符(如英文字母,标点符号,数字,数学运算符等)以外,还有一些字符是无法用键盘直接输入的,比如,“回车”,此时需要采用一种新的定义方式——转义字符,它以反斜杠\开头,随后接特定的字符。
下面列举了一些常见的转义字符:
接下来,我们通过一个具体的案例来演示转义符的用法:
1 #include
2 int main()
3 {
4 char ch1 = 'A';
5 char ch2 = '\n';
6 char ch3 = 'B';
7 char ch4 = '\\';
8 printf("%c",ch1);
9 printf("%c",ch2);
10 printf("%c",ch3);
11 printf("%c",ch4);
12 printf("\n");
13 return 0;
14 }
运行结果如下图所示:
案例中定义了四个字符型变量,其中 ch2 被赋值为转义字符 '\n' 即换行符序,ch4被赋值为转义字符 '\\' 即反斜杠。从第 8 行到第 11 行按照顺序分别将四个变量的值输出到屏幕上,我们会发现,输出字符 A之后则会另起一行输出字符 B,转义字符 '\n' 的作用就是控制输出结果另起一行。字符 B后输出的是字符 ' \' 。第12 行为了使输出结果的格式清晰一些又输出了一个换行符,防止程序结束后命令行提示符紧跟在输出结果的后面。
求关注,求转发,求支持!
想要学习的童鞋可以加群:564950050
同时关注我们的微信公众号:【轻松学C语言】
-
C语言 数据类型
2015-05-11 14:28:01C语言 数据类型 -
C语言数据类型的定义
2020-05-25 08:04:32数据类型的定义 1、数据类型的定义 变量的定义: 数据类型 变量名【标识符】 变量的赋值: 变量名 = 值; 数据类型 变量名【标识符】 = 值 标示符的命名规则: 1、字母、数字、下划线 2、不能以数字开头 3、见名知义...数据类型的定义
1、数据类型的定义
变量的定义:
数据类型 变量名【标识符】
变量的赋值:
变量名 = 值;
数据类型 变量名【标识符】 = 值
标示符的命名规则:
1、字母、数字、下划线
2、不能以数字开头
3、见名知义
4、不能和同一函数内的其他标示符重复
5、不能使用C语言关键字
6、区分大小写
标示符:
ABC
abc
—abc
_abc.
123_bac
a_b_123
常量的定义:
1、const 数据类型 常量名
2、【宏定义】#deifne 常量名 值
注意:
1、通过#define 定义的常量 是根据值来匹配数据类型的
2、const 修饰的常量是不安全 可以通过指针来修改
2、进制:
注意:
- 进制数以自己的进制表示是数字本身
进制数以自己的进制表示是数字本身 //十进制数10 int a=11; printf("%d\n",a); >>>>>>>>>>11 //八进制 int b=011; printf("%o\n",b); >>>>>>>>>>11 //十六进制 int c=0X21; printf("%x\n",c); >>>>>>>>>>>21 ------------------------------------------------------------------- //十进制数10 int a=11; printf("%x\n",a); //八进制 int b=011; printf("%x\n",b); //十六进制 int c=0X21; printf("%x\n",c); >>>>>>>>> b 9 21
二进制:
二进制逢二进一,所有的数组是0、1组成
十进制转二进制:
除二反序取余法:将十进制数每次除以2 取出余数 按照结果倒叙依次获取结果
二进制转十进制:
权值法:将二进制数各个位数从0位开始乘以2的N幂 将各个位数的结果相加
八进制:
八进制逢八进一,所有的数组是0到7组成
十进制转八进制:
除八反序取余法:将十进制数每次除以8 取出余数 按照结果倒叙依次获取结果
十六进制:
十六进制逢十六进一,所有的数组是0到9和A到F组成 字母不区分大小写
十进制转八进制:
除十六反序取余法:将十进制数每次除以16 取出余数 按照结果倒叙依次获取结果
8421法则:
将各个位数的二进制用十进制中的【数字 】来表示多位的二进制数 通过【数字 】相加就可以得到二进制数的数据
8 1000
4 100
2 10
1 1
1000
100
10
1
————
1 1 1 1
进制在程序中打印:
int a=10;//十进制中的10
int b=010;//八进制中的10 在程序中定义一个八进制数需要在数前面加上0区分
int c=0x10;//十六进制中的10在程序中定义一个十六进制数需要在数前面加上0x区分
int d=0X10;//十六进制中的10在程序中定义一个十六进制数需要在数前面加上0X区分
注意:在程序中没有办法表示一个二进制数
%d 将数据按照十进制输出
%o将数据按照八进制输出
%x将数据按照十六进制小写输出
%X将数据按照十六进制大写输出
3、原码、反码、补码
一个有符号的整型数据可以分为两部分一部分是符号位、一部分是数字位
无符号数据类型只包含数字位部分
signed int a= 1986(有符号标识 signed可以不用写)
二进制:11111000010
1986原码:0000 0000 0000 0000 0000 0111 1100 0010
-1986原码:1000 0000 0000 0000 0000 0111 1100 0010
1986反码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1101
1986补码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1110
1 0000 0000 0000 0000 0000 0000 0000 0000
溢出:在数据进行操作的时候会导致超出数据类型大小,会向前位进1,多于原始数据类型大小,会被系统自动舍弃 保留从后面开始数据类型大小的位数
10+20
0000 1010
0001 0100
0001 1110
-10±20
原码:1000 1010
反码:1111 0101
补码:1111 0110
原码:1001 0100
反码:1110 1011
补码:1110 1100
1111 0110
1110 1100
补码:1110 0010
反码:1110 0001
原码:1001 1110 16+8+4+2=-30
练习:用生辰年份年去生辰日期(??)
1992
-326
1、将10进制转化为二进制
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :0000 0000 0000 0000 0000 0001 0100 0110
2、加符号位将数据变为原码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1000 0000 0000 0000 0000 0001 0100 0110
3、转化为反码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1001
4、将反码+1转化为补码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1010
5、计算补码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1010
结果 : 1 0000 0000 0000 0000 0000 0110 1000 0010
6、将数据转化为10进制
110 1000 0010
2+128+512+1024 = 1666
无符号:
unsigned int a= 1986
无符号:1111 1111 1111 1111 1111 1111 1111 1111 =
0000 0000 0000 0000 0000 0000 0000 0000 =0
无符号整型取值:0-4294967295(2^32-1)
无符号的字符型:0-255
有符号:
int a= 1986
0111 1111 1111 1111 1111 1111 1111 1111 = 2147483647
0000 0000 0000 0000 0000 0000 0000 0001
原码: 1111 1111 1111 1111 1111 1111 1111 1111 = -2147483647
反码:1000 0000 0000 0000 0000 0000 0000 0000
补码:1000 0000 0000 0000 0000 0000 0000 0001=-2147483647
-0的补码
补码:1000 0000 0000 0000 0000 0000 0000 0000=-0 = -2147483648
4、sizeof()
求出数据类型在内存中占的大小(BYTE)
int value =sizeof(变量名);
int value = sizeof(数据类型) sizeof 数据类型
注意:根据32位操作系统获取的数据类型大小
char(字符型)【1】<short(短整型)【2】
<=int(整型)【4】|float (单精度浮点型)【4】|long(长整型)【4】
<long long(长长整型)【8】|double(双精度浮点型)【8】
输出和输入:
输出字符的两种方式:
1、printf("%c",变量)
2、putchar(字符)
输入字符的两种方式:
1、scanf("%c",&b变量)
2、变量=getchar()
char 1B=8bit
0x7f
0111 1111
0000 0010
1000 0001
1000 0000
1111 1111 -127
0xff
1111 1111
0000 0001
1 0000 0000
5、数据类型:
字符型:
char 用于存储一个单一的字符
在格式化输入printf("%c",变量)通过占位符%c来接收的
每一个char类型都对应在ASCII中有具体的值
例如:数字【0】对应的ASCII值为48
字母【A】对应的ASCII值为65
字母【a】对应的ASCII值为97
转义字符:
计算机会使用一些字符来完成程序设计,如果在编程中想使用这些字符的本意,需要通过【\】来转义
注意:想在控制台中输出% 需要使用【%%】
浮点型:
float 用于存储带有小数的数据
在格式化输入printf("%f",变量)通过占位符%f来接收的
double 用于存储带有小数的数据 数据长度比float更长
注意:因为将小数转化为二进制时不是一个精确的值,所以浮点型都会有数据偏差
-
c语言数据类型72832.pptx
2020-10-14 06:42:42掌握C语言数据类型分类 2. 掌握整型数据实型数据字符数据使用规则 3.掌握C语言常量变量的使用 3.1 数 据 类 型C语言提供的数据结构是以数据类型形式出现的 一数据类型分类 1.基本类型 整型 实型又称浮点型 字符型 ... -
[路边工作室]浅谈c语言002c语言数据类型.docx
2020-09-15 17:52:31PAGE / NUMPAGES 浅谈C语言002C语言数据类型 第一部分 C语言数据类型 数据是我们日常生活中经常见到的东西那么在C语言中也不例外 C语言的数据类型分为基本数据类型指针数据类型构造数据类型和空类型 在基本数据类型... -
C语言数据类型转换
2020-03-04 09:56:45文章目录一、自动类型转换1、操作数中没有浮点型数据时2、操作数中有浮点型数据时3、赋值运算符两侧的类型不一致时4、右值超出左值类型范围时二、强制类型转换三、课后作业四、版权声明 计算机进行算术运算时,要求... -
c语言数据类型高低级
2019-12-26 08:51:49转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 a.若两种类型的字节数不同,转换成字节数高的类型 b.若两种类型的字节数相同,且一种有符号... -
ASCII码表C语言转义字符C语言运算符及其优先表C语言关键字C语言数据类型大全.pdf
2021-10-08 14:12:18ASCII码表C语言转义字符C语言运算符及其优先表C语言关键字C语言数据类型大全.pdf -
C语言数据类型转换.pdf
2020-09-08 14:41:45C语言数据类型转换.pdf -
学习C语言实验C语言数据类型及输入输出函数.pdf
2021-10-05 23:06:11学习C语言实验C语言数据类型及输入输出函数.pdf -
第3章C语言数据类型.ppt
2020-02-25 00:08:52掌握C语言数据类型分类 2. 掌握整型数据实型数据字符数据使用规则 3.掌握C语言常量变量的使用 第3章 语言数据类型 3.1 数 据 类 型 C语言提供的数据结构是以数据类型形式出现的 一数据类型分类 1.基本类型 整型 ... -
c语言数据类型是如何被大多数计算机系统所支持.docx
2020-12-16 10:28:12C语言数据类型是如何被大多数计算机系统所支持 问题 在读K&R版的The C Programming Language一书时我在[介绍第3页]看到这样一条说明 因为C语言提供的数据类型和控制结构可以直接被大部分计算机系统所支持所以在实现... -
C语言实验(C语言数据类型及输入输出函数).pdf
2021-09-30 16:41:47C语言实验(C语言数据类型及输入输出函数).pdf -
ASCII码表C语言转义字符C语言运算符及其优先表C语言关键字C语言数据类型大全[整理].pdf
2021-10-11 00:32:40ASCII码表C语言转义字符C语言运算符及其优先表C语言关键字C语言数据类型大全[整理].pdf -
C语言数据类型级别由高到低
2020-02-17 10:33:36数据类型,很多的编程爱好者都不陌生,小编今天记录一下数据类型级别由高到低,方便日后查阅,提前做个总结,同时也希望小编的一个文字总结,能快速的帮到困惑着解决问题,那么C语言数据类型级别由高到低如下: ... -
C语言实验(C语言数据类型及输入输出函数)[文].pdf
2021-10-11 01:43:22C语言实验(C语言数据类型及输入输出函数)[文].pdf -
C语言数据类型占内存大小
2019-05-19 10:22:06C语言数据类型 使用sizeof计算各数据类型占用内存大小 #include<stdio.h> int main() { typedef struct { int a ; char b; int c; }struct_test_t; typedef enum{ test1 =1, test2, test3,... -
一起学习C语言:C语言数据类型(三)
2020-02-07 17:09:41一起学习C语言:C语言数据类型(二)>中,我们了解了整形和字符类型的定义,以及二进制到八进制、十进制和十六进制转换方式。本篇文章中,我们进行分析浮点数的运算,并通过二进制、十进制和十六进制表达浮点数值。 ... -
C语言数据类型关键字
2018-10-25 23:44:25C语言关键字 指只用于语义定义的单词不能用于其他用途 int、 short、 long、char、unsigned、signed、Float、Double、_bool、_comlex、_imaginary 整数 整数是指没有小数的数 关键字有 int、 short、 long、 ...