bit与byte:
c语言直接访问内存的物理地址,可以进行位(bit)一级的操作.
bit意为“位”或“比特”,是计算机运算的基础;
byte意为“字节”,是计算机文件大小的基本计算单位;
说到usb2.0标准接口传输速率。许多人都将“480mbps”误解为480兆/秒。其实,这是错误的,事实上“480mbps”应为“480兆比特/秒”或“480兆位/秒”,它等于“60兆字节/秒”,大家看到差距了吧。
这要从bit和byte说起:bit和byte同译为"比特",都是数据量度单位,bit=“比特”或“位”。
byte=字节即1byte=8bits,两者换算是1:8的关系。
mbps=mega bits per second(兆位/秒)是速率单位,所以正确的说法应该是说usb2.0的传输速度是480兆位/秒,即480mbps。
mb=mega bytes(兆比、兆字节)是量单位,1mb/s(兆字节/秒)=8mbps(兆位/秒)。
我们所说的硬盘容量是40gb、80gb、100gb,这里的b指是的byte也就是“字节”。
1 kb = 1024 bytes =2^10 bytes
1 mb = 1024 kb = 2^20 bytes
1 gb = 1024 mb = 2^30 bytes
8bit(位)=1Byte(字节)
1024Byte(字节)=1KB
1024KB=1MB
1024MB=1GB
数据在计算机中的存储方式:
1、数据单位:
位(bit)
|
是计算机存储设备的最小单位,由数字0或1组成, 译为“比特”。
|
字节(Byte)
|
8个二进制位编为一组称为一个字节,即:1B = 8bit。字节是计算机处理数据的基本单位,计算机以字节为单位解释信息。字节简写为“B”,译为“拜特”。
通常,一个ASCII码占1个字节;一个汉字国标码占2个字节;整数占2个字节;实数,即带有小数点的数,用4个字节组成浮点形式等。 |
字(word)
|
计算机一次存取、处理和传输的数据长度称为字,即:一组二进制数码作为一个整体来参加运算或处理的单位。一个字通常由一个或多个字节构成,用来存放一条指令或一个数据。
|
字长
|
一个字中所包含的二进制数的位数称为字长。 不同的计算机,字长是不同的,常用的字长有8位、16位、32位和64位等,也就是经常说的8位机、16位机、32位机或64位机。
例如,一台计算机如果用8个二进制位表示一个字,就说该机是八位机,或者说它的字长是8位的;又如,一个字由两个字节组成,即16个二进制位,则字长为16位。字长是衡量计算机性能的一个重要标志。字长越长,一次处理的数字位数越大,速度也就越快。 |
2、存储单位:
表示一个数据的总长度称为计算机的存储单元。
在计算机中,当一个数据作为一个整体存入或取出时,这个数据存放在一个或几个字节中组成 一 个存储单元。存储单元的特点是,只有往存储单元送新数据时,该存储单元的内容用新值代替旧值,否则永远保持原有数据。
3、编址与地址:
编址:对计算机存储单元编号的过程称为“编址”,是以字节为单位进行的。
地址:存储单元的编号称为地址。
注意:地址号与存储单元是一一对应的,CPU通过单元地址访问存储单元中的信息,地址所对应的存储单元中的信息是CPU操作的对象,即数据或指令本身。地址也是用二进制编码表示,为便于识别通常采用16进制
#include "stdio.h"
#include <math.h>
int main(void)
{
printf("测试世界\n");
return(0);
}
main是主函数的函数名,每个c源程序都必须有,且只能有一个主函数(main函数)。
最新的 C99 标准中,主函数只有以下两种定义方式是正确的:
int main( void )
int main( int argc, char *argv[] )
如果不需要从命令行中获取参数,请用int main(void) ;否则请用int main( int argc, char *argv[] ) 。
main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的调用者(如操作系统)
如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; main 函数的返回值用于说明程序的退出状态。如果返回 0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。
int main( int argc, char *argv[] )
从函数参数的形式上看,包含一个整型和一个指针数组。当一个C的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件,这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由系统在启动运行时传递参数了。
在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为:
命令参数1参数2....参数n¿
此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。
命令行与main()函数的参数存在如下的关系:
设命令行为:program str1 str2 str3 str4 str5
其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6],指针数组的取值情况如图6-15所示。
数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后才是参数。
#include "stdio.h" //include称为文件包含命令扩展名为.h的文件也称为头文件或首部文件
#include <math.h> //头文件可以用""或引号<>指定
尖括号< > 括起来表明这个文件是一个工程或标准头文件。查找过程会检查预定义的目录,我们可以通过设置搜索路径环境变量或命令行选项来修改这些目录。
如果文件名用一对引号""括起来则表明该文件是用户提供的头文件,查找该 文件时将从当前文件目录(或文件名指定的其他目录)中寻找文件,然后再在标准位置寻找文件
int main(void)
{
double x,s; //定义两个实数变量
printf("input number:\n");//显示提示信息
scanf("%lf",&x);//从键盘获得一个实数x
s=sin(x)//求x的正玄值,并把它赋给变量s
printf("sine of %lf is %lf\n",x,s);//显示程序运算结果
}//程序结束
include称为文件包含命令,其意义是把尖括号""或引号<>内指定的文件包含到本程序来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h。因此也称为头文件或首部文件.sin函数是数学函数,其头文件为math.h文件.scanf和printf是标准输入输出函数,其头文件为stdio.h.
#include 预处理指令和头文件
在编译器对我们写的源程序进行编译之前,预处理器会对我们的写的源代码 进行必要的处理,称为预处理。#include 就是一个预处理指令,它命令预处理器 进行的预处理是:把特定的头文件包含到我们的源代码里。 #include <stdio.h>的作用是将头文件 stdio.h 里的内容包含进我们的程序, 产生的结果是将 stdio.h 里的内容一字不漏地插入 #include <stdio.h>出现的 地方,并且删除 #include <stdio.h>。换句话说,就是用 stdio.h 里的内容替换 #include <stdio.h>。这个过程是在预处理阶段完成的。C 语言的这种包含文件的 机制为多个程序共享相同信息提供了极大的方便。 stdio.h 是 C 语言标准中定义了的头文件,它包含着输入输出函数的信息。
头文件中包含着编译器进行编译时所需的信息。头文件中可能指明了函数名和 函数调用方法,但是这些函数的实现代码并不在头文件中,而是在预先编译好了的 库文件里。 链接器负责在库文件中寻找我们的程序所需的代码,并且把那些代码和我们写的 程序进行链接,从而将我的写的程序链接成可执行文件。一句话,头文件用于指导 编译器正确地将我们写的源程序编译成可执行文件. 被包含的文件还可以含有#include 指示符,由于嵌套包含文件的原因,一个头文件可能会被多次包含在一个源文件中,条件指示符可防止这种头文件的重复处理。
例如:
#ifndef BOOKSTORE_H
#define BOOKSTORE_H
/* Bookstore.h 的内容 */
#endif
条件指示符#ifndef 检查BOOKSTORE_H 在前面是否已经被定义,这里BOOKSTORE_H是一个预编译器常量习惯上预编译器常量往往被写成大写字母,如BOOKSTORE_H在前面没有被定义则条件指示符的值为真,于是从#ifndef 到#endif 之间的所有语句都被包含进来进行处理。相反,如果#ifndef 指示符的值为假则它与#endif 指示符之间的行将被忽略,为了保证头文件只被处理一次,把如下#define 指示符
#define BOOKSTORE_H
放在#ifndef 后面,这样在头文件的内容第一次被处理时BOOKSTORE_H 将被定义 .
从而防止了在程序文本文件中以后#ifndef 指示符的值为真。
为了体会用#ifndef/#define#endif来防止头文件被引用(例子)
这一作用,写了个例子来做试验
///////////////head1.h begin///////////////////////////
#include <iostream>
using namespace std;
#ifndef HEAD1_H //<1>
#define HEAD1_H //<2>
class b{
public:
int GetData();
b()
{
cout << "An object b is created.\n";
};
private:
int*data;
};
#endif //<3>
//////////head1.h end///////////////
////////////head2.h begin///////////////
#include <iostream>
#include "head1.h"
using namespace std;
#ifndef HEAD2_H
#define HEAD2_H
class a{
public:
int GetData();
a(){cout << "An object a is created.\n";};
private:
int*data;
};
#endif
//////////////////////head2.h end///////////////////////////
以下是main函数文件
#include "head1.h"
#include "head2.h"
int main()
{
a a1;
b b1;
}
结论:
1.如果将head1.h中的<1><2><3>行注释掉,编译错误:
b class type redifinition
2.加上,正确编译
3.原因就是因为head2.h中包含了head1.h,而且main.cpp中也包含了head1.h
于是会发生重复引用,进而b class会redifinition.
主函数体中又分为两部分,一部分为说明部分,另一部分执行部分。说明是指变量的类型说明,C语言规定,源程序中所有用到的变量都必须先说明,后使用,否则将会出错.(考试的时候会经常考哦).
输入和输出函数scanf以及printf,scanf和 printf这两个函数分别称为格式输入函数和格式输出函数.其意义是按指定的格式输入输出值。因此,这两个函数在括号中的参数表都由以下两部分组成:"格式控制串",参数表.格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型 .在printf函数中还可以在格式控制串内出现非格式控制字符,(scanf函数不可以在格式控制串内出现非格式控制字符)这时在显示屏幕上将原文照印。参数表中给出了输入或输出的量。当有多个量时,用逗号间隔.例如:printf("sine of %lf is %lf\n",x,s);其中%lf为格式字符,表示按双精度浮点数处理。它在格式串中两次现,对应了x和s两个变量。其余字符为非格式字符则照原样输出在屏幕上.x和s表示输出的量,中间用逗号隔开.
#include <stdio.h>
int max(int a ,int b);
int main(void)
{
int m,n,z;
printf("please input two number:\n");
scanf("%d%d",&m,&n);
z=max(m,n);
printf("the max number is %d\n",z);
return 0;
}
int max(int a, int b)
{ int maxmax;
if(a>b)
maxmax=a;
else
maxmax=b;
return maxmax;
}
程序由两个函数组成,主函数和max 函数。函数之间是并列关系。可从主函数中调用其它函数。max 函数的功能是比较两个数,然后把较大的数返回给主函数。max 函数是一个用户自定义函数。因此在主函数中要给出说明。可见,在程序的说明部分中,不仅可以有变量说明,还可以有函数说明。