今天学习的是C语言,本次接着上次的内容继续开始,主要是说C语言中数据类型的内容,如有疑问可以翻找我上一篇关于C语言的内容。
首先是冯诺依曼机,它规定指令和数据都是存储在内存中的,都是以二进制形式存储的。那为什么是使用二进制呢?因为这在电器元件中易实现,且双稳态元件较多。而二进制的运算比诸如十进制等其他进制数运算简单,只需4条规则即可完成运算,反观像十进制数,其运算则有些繁琐。同时二进制的使用也易实现物理上对数据的存储。
在对正负的表示上二进制数可以分为“有符号数”和“无符号数”,两者间的区别在于怎样解释最高位。对于无符号数其最高位被C编译器解释为数据位;对于有符号数其最高位被C编译器解释为符号位,即0为正,1为负。但是如果这样数字“0”就无正无负,那按符号表示还唯一吗?其实负数是以二进制补码形成储存的,这样储存就便于用统一的形成来表示0,也便于将减法运算也转化成为加减运算来处理。
那么什么是补码呢?补码是计算机中最常用的表示方法。对于正数,其补码与其原码相同。对于负数,其补码是其反码加 1。补码的一个重要特性是,任何数的补码加上该数本身,结果总是 0。
数据在程序中通常以压缩十进制,二进制来表示即形成八进制和十六进制,这样在可以节省空间。当我们使二进制转换成八进制数时只需将二进制数“三位一组”便可转换成八进制数。
就如图中所示的这样。而之所以会“三位一组”,其就是因为二进制的三位最高数111等于八进制的最高数7。
同理在二进制转换十六进制上时,使用“四位一组”的方式即可进行转化。
即如此图所示,其原理与二转八一致。
接下来介绍内存,内存就是计算机内的存储部件。它的特点就是速度快,可随机访问,但是掉电即失。内存的存储单元是一个线性地址表,地址按字节(Byte)进行编址,字节是8个“位”。每个字节都用唯一的一个整数来标识,它的地址是一个十六进制无符号整数,32位二进制变为十六进制就是以“四位一组”的方式变成十六进制数,所以32位相当于8个十六进制位。
在计算机中存储器容量的最小单位是“位”,也称比特,一位只能存储0和1。而计算机无法表示太多数据,所以需要将多个位组合起来,8个位可以表示0-255的整数,即字节,所以字节是最小的、可以寻址的储存单位。内存空间通常是用字节数的大小来表示,如:1B=8b、1KB=1024B、1MB=1024KB、1GB=1024MB、1TB=1024GB。但是值得一提的是,硬盘的大小不是按照1024来算的,通常厂家是以1G=1000MB为标准,忽略了里面的24。
对于计算机系统和硬盘本身而言,数据类型的概念是并不存在的。而之所以计算机会引用数据类型是为了更好的组织数据,分成所需内存大小不同的数据,规范数据使用,提高程序的可读性,方便用户的使用。
而这里先只会涉及到基本类型的内容。
C语言数据由常量与变量形成。常量就是在程序中不能改变的量。它包含有整型(默认常量是int)、浮点型(默认双精度型double)、字符型(这里的内容需用单引号括起来)以及枚举型;变量是在程序运行中能够改变的量。
对于变量类型需要有所定义,它是由“类型关键字 变量名”组成。(如:int a)。在使用的原则上必须先声明再使用,一个声明可声明若干个类型变量(如int a,b,c),顺序无紧要。声明的同时可以赋值,即变量的初始化,如果最终都不赋值的话,最后未确定的值就是乱码。当然如果使用赋值表达式来进行赋值也可,即变量=表达式。但是要注意左值和右值的类型必须一致,不能出现像定义整数型最后赋值小数的情况。在进行多重赋值的情况下,如变量1=变量2=表达式,需由右向左赋值。
变量的属性是由变量的值(这里有多大空间取决于数据类型)、变量名、变量地址(即起始地址)和变量被分配的内存大小组成的。
变量类型决定了占用空间的内存大小,数据的存储形成,合法的取值范围和可参考的运算种类。不同的类型占用大小不同,整数型中int占4个字节、short int占2个字节、long int占4个字节,无符号要在前面加unsigned修饰后面的int、short、long;浮点型中float占4个字节、double占8个字节、long double占8个字节;字符型char占1个字节。
在编码上,不同类型的数据存储形式不同,字符型以二进制方式存储,字符编译方式取决于计算机系统的字符集,如我们之后会常遇到的ASCII字符集。编码中1个字节是8位,一般只用7位,最高位被用作奇偶校验。奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中"1"的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中"1"的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验"1"的个数是否为奇数,从而确定传输代码的正确性。
汉字有汉字编码,并且要求兼容ASCII码,并用连续的2个字节表示。需要强调一点的是有符号数和无符号数的取值范围是不同的。而若在向变量赋值赋出超过其范围的数会得到一个奇怪的结果,最后会产生数值溢出。
各数据类型中是有可参与运算的范围的。整数型是加、减、乘、除和求余;浮点型是加、减,乘、除;字符型是加、减(要求是整数),且是对ASCII码的运算。
现在可以稍微涉及一些代码内容。
#include<stdio.h>
/* 以#开头,stdio是标准的输入输出函数,h是头文件,
意思是编译预处理指令,意在程序中调用标准输入输出函数,
要将头文件包含进来才能使用 */
main()
/* main是主函数,任何标准C语言都有一个主函数,
而且程序是从主函数开始执行,主函数内容是放在{}中的,每行都以";"结尾 */
{
printf("hello world\n") ; //printf是输出的意思,\n是换行符
}
最后是C语言常见符号:关键字(保留字)、标识符(由系统预定义的标识符和用户自定义组成)、运算符、分隔符、其他符号以及常量。
以上就是学习C语言的全部内容,如有错误欢迎留言指正。
标签:字节,符号,二进制,补码,C语言,学习,第二天,变量 From: https://blog.csdn.net/Steven__Lian/article/details/141198575