zoukankan      html  css  js  c++  java
  • 零基础学习iOS开发概述

    【零基础学习iOS开发】【02-C语言】01-概述

    前面已经给大家介绍了iOS开发相关的一些基础知识,比如学习iOS开发需要什么准备iOS开发的前景等等。在《开篇》这讲中说过:其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言。iOS开发需要学习的主要程序设计语言有:C语言、C++、Objective-C,其中C++、Objective-C都是以C语言为基础,从C语言衍生出来的。从这讲开始,我们就来学习传说中的C语言。

    一、计算机常识

    在学习C语言之前,先要了解一些计算机常识

    1.计算机只能识别0和1

    • 大家都知道,计算机要通电才能工作,从根本上说,计算机只能识别电信号:高电平信号、低电平信号。我们用1代表高电平,0代表低电平。
    • 也就说,计算机只能识别0和1。

    2.二进制

    因为计算机只能识别0和1,因此计算机所能识别的指令和数据都是用二进制数(0和1)来表示的。所谓二进制,就是用0和1来表示所有的数。不过我们日常生活中最常用的是十进制,用0~9来表示所有的数

    1> 二进制指令

    给计算机灌输一些指令,它就能执行相应的操作,而计算机只能识别由0和1组成的指令。在计算机发展初期,计算机的指令长度为16,即以16个二进制数(0或1)组成一条指令,例如,用1011011000000000这条指令,是让计算机进行一次加法运算。因此,如果要想计算机执行一系列的操作,就必须编写许多条由0和1组成的指令,可以想象的到,这个工作量是如此巨大。

    2> 二进制数据

    平时我们在计算机中存储的一些数据,比如文档、照片、视频等,都是以0和1的形式存储的。只不过计算机解析了这一大堆的0和1,以图形界面的形式将数据展示在我们眼前。

    二、程序设计语言发展史

    我们可以利用程序设计语言来编写程序,再将编好的程序运行到计算机上,计算机就能够按照程序中所说的去做。从计算机诞生至今,程序设计语言大致经历了3个发展阶段:机器语言、汇编语言、高级语言。其中,C语言属于高级语言。

    1.机器语言

    1> 什么是机器语言

    在计算器诞生初期, 所有的计算机程序都是直接用计算机能识别的二进制指令来编写的,也就是说所有的代码里面只有0和1。这种程序设计语言就是“机器语言”。这些由0和1组成的二进制指令,又叫做“机器指令”

    2> 优点

    • 由于机器语言编写出来的代码是能被计算机直接识别的,因此机器语言是直接对硬件产生作用的,程序的执行效率非常高。
    • 机器语言能直接访问控制计算机的各种硬件设备,如磁盘存储器CPUI/O端口等。

    3> 缺点

    • 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令和指令的涵义,指令又多又难记。
    • 编出的程序全是些0和1的指令代码,可读性差,还容易出错。
    • 由于机器语言是直接对硬件产生作用的,对硬件的依赖性很强,因此不同型号计算机的机器语言又不一样。也就是说,如果2台不同型号的机器想实现一样的功能,需要编写2套完全不同的代码。

    可以看出,机器语言很难掌握和推广,现在除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

    2.汇编语言

    1> 什么是汇编语言

    • 由于机器语言的种种弊端,严重影响开发效率,后面就出现了汇编语言。汇编语言其实就是符号化的机器语言,它用一个符号(英文单词、数字)来代表一条机器指令。比如,在机器语言中,用1011011000000000这条指令,是让计算机进行一次加法运算;而在汇编语言中,用英文单词“ADD”就可以表示加法运算。一个有意义的英文单词,很明显比一串又臭又长的二进制指令,直观好记多了。
    • 由于计算机只能识别0和1,用汇编语言编写的代码是不能被计算机所识别的,像刚才的“ADD”,计算机肯定不知道是什么意思。因此,用汇编语言编写的代码需要翻译成二进制指令后,才能被计算机识别。这个翻译的工作交给“编译器”去做。

    2> 优点

    • 对比机器语言,汇编语言的代码可读性好
    • 汇编语言能像机器语言一样,可以直接访问控制计算机的各种硬件设备,如磁盘存储器CPUI/O端口。使用汇编语言,可以访问所有能够被访问的软、硬件资源。
    • 目标代码简短(目标代码就是经编译器翻译过后的二进制代码),占用内存少,执行速度快。(计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。其作用是用于暂时存放CPU中的运算数据,以及与硬盘外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。)计算机的内存是有限的,因此一个应用程序运行时所占用的内存越少越好。

    3> 缺点

    • 汇编语言是面向机器的,通常是为特定的计算机或系列计算机专门设计的。因此,不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性,也就是说,一个程序只能在一种机器上运行,换到其他机器上就不能运行。
    • 汇编语言的符号非常多、难记,即使是完成简单功能也需要大量的汇编语言代码,很容易产生BUG,难于调试
    • 使用汇编语言必须对硬件非常了解,开发效率很低,周期长且单调

    3.高级语言

    由于汇编语言依赖于硬件,代码可移植性差,符号又多又难记,于是人类就发明了非常接近自然语言的高级语言。后面要学习的C语言就是高级语言。

    1> 优点

    • 简单、易用、易于理解,语法和结构类似于普通英文,且远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用太熟悉硬件知识
    • 写出来的程序更加简洁。比如要计算2个数的和,在高级语言中可以写得非常简洁:d=a+b;。但是在机器语言和汇编语言中,就需要几条甚至几十条指令,而且不同机器还要编写不同的指令代码
    • 用高级语言编写的同一个程序还可以在不同的机器上运行,具有可移植性

    2> 注意

    用高级语言编写的程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上

    三、C语言简史

    • C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作系统的基础)
    • 随着UNIX操作系统的成功,C语言也得到了大幅度地推广,被先后使用到大、中、小、微型主机上,至今还是世界上最流行、使用最广泛的高级程序设计语言之一
    • C语言是一门面向过程的语言,非面向对象的语言。(究竟什么是面向过程、面向对象,暂时不用去理解,只需要知道C语言是面向过程就Ok了)

    下面是2013年3月份的编程语言热门排行榜

    从C语言诞生至今,它的热度一点也没减过,前两名基本上都是Java和C

    四、C语言的特点

    1.丰富的运算符

    计算机的基本功能就是计算,因此一门程序设计语言的计算能力是非常重要的。C语言提供了34种运算符,计算类型极其丰富,其中包括了最基本的加减乘除运算。

    2.丰富的数据类型

    • C语言的生命力之所以如何强大,很大一部分是因为它拥有丰富的数据类型。
    • 正因为C语言数据类型丰富,运算能力极强,因此很多数据库都是用C语言编写的,比如DB2、Oracle等。

    3.可以直接操作硬件 

    跟汇编语言一样,C语言可以直接操作硬件,允许直接对位、字节、地址进行操作(位、字节、地址是计算机最基本的工作单元),可以说几乎没有C语言做不了的事情。

    4.高效率的目标代码

    目标代码,就是经编译器翻译后的二进制代码。C语言的目标代码执行效率非常高。

    5.可移植性好

    在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。

    上面所说的都是C语言的优点,它有个非常明显的缺点:语法限制不严格。这样就导致初学者对C语言语法不能理解得很透彻,而且在开发过程中也会带来很多容易忽略的问题。 

    五、C语言的作用

    • 由于C语言具有强大的数据处理能力,而且允许直接访问内存地址,直接对硬件操作,因此它适于编写系统软件、图形处理、单片机程序、嵌入式系统开发甚至是用于科研。
    • 很有游戏外挂都是用C语言写的
    • 很多操作系统的底层都是用C语言写的,比如android 

    六、C语言的版本问题

    从UNIX操作系统的成功后,C语言得到了广泛地应用,从大型主机到小型微机,都有C语言活跃的身影,也衍生了很多个版本的C语言。长期以往,C语言将可能成为一门有多个变种、松散的语言。一门正式的语言,肯定要有个标准才行,不然就乱套了。为了改变这种局面,1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,开始制定C语言标准的工作。1989年C语言标准被批准,这个版本的C语言标准通常被称为ANSI C

     
     
  • 相关阅读:
    leetcode 155. Min Stack 、232. Implement Queue using Stacks 、225. Implement Stack using Queues
    leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String
    leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
    leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
    leetcode 162. Find Peak Element
    leetcode 88. Merge Sorted Array
    leetcode 74. Search a 2D Matrix 、240. Search a 2D Matrix II
    Android的API版本和名称对应关系
    spring 定时任务执行两次解决办法
    解析字符串为泛型的方法
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3059310.html
Copyright © 2011-2022 走看看