`
sarin
  • 浏览: 1756836 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
E3b14d1f-4cc5-37dd-b820-b6af951740bc
Spring数据库访问系列...
浏览量:173650
C2083dc5-6474-39e2-993e-263652d27795
Android学习笔记
浏览量:368109
5f40a095-b33c-3e8e-8891-606fcf3b8d27
iBatis开发详解
浏览量:189254
B272a31d-e7bd-3eff-8cc4-c0624ee75fee
Objective-C学习...
浏览量:99829
社区版块
存档分类
最新评论

Objective-C学习笔记三:基本数据类型和表达式

阅读更多
    接上文
    任何编程语言都会有数据类型,比如在Java中,数据类型可分为基本数据类型(如int,long等)和引用类型(类类型,如String等)。数据类型在所有语言中又是大同小异的。在O-C中我们已经见过int,那么还有三种最基本的数据类型,float,double和char。
    int类型表示整数,float和double表示浮点数,只是double可以表示更大的范围,char表示单个字符,如果在O-C中使用字符串,可以使用NSString类型,就是之前我们见过的@""部分。
    下面来看一段代码,测试基本数据类型的使用:
#import <Foundation/Foundation.h>

int main(int argc, const char *argv[])
{
    @autoreleasepool{
        int integerVar = 411;
        float floatVar = 3.79;
        double doubleVar = 1.16e+12;
        char charVar = 'N';

        NSLog(@"integer var = %i", integerVar);
        NSLog(@"float var = %f", floatVar);
        NSLog(@"double var = %e", doubleVar);
        NSLog(@"double var = %g", doubleVar);
        NSLog(@"char var = %c", charVar);
    }
    return 0;
}

    这里我们定义了四个变量,各自的内容很好看出,之后我们使用了5条NSLog语句来打印,只是设定的显示数据类型对doubleVar有2个。那么我们在vi中编辑上述代码:



    之后使用clang来进行编译,运行程序得到输出:


    对于int类型的输出没有任何异议,对于float类型,可以看到输出的是六位小数,这是计算机系统本身决定的,因为float型在计算机内的存储方式就比int型特殊。那么之后对double类型的变量处理也是如此,只是不同的表示方式,取得的精度会有所不同。char类型的就不多说了。
    在使用基本数据类型时,我们只介绍了简单的的四种。其实在O-C中还有long,long long,short,unsigned和signed限定修饰词。前三种其实都是int的扩充,比如长整型,更长的整型,短整型等。在Java中可以直接使用long来声明变量,而在O-C中就要使用long int来声明。那么unsigned和signed表示无符号型和有符号型变量,比如unsigned int表示无符号型整数,也就是正数范围。
    清楚了基本的数据类型,下面来看一下基本表达式,这也和其它程序设计语言是相同的,最简单的表达式就是算术表达式了。看下面的代码:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int a=200,b=20,c=50,d=8,result;
        
        result = a + b;
        NSLog(@"a + b = %i",result);

        result = a * c + b;
        NSLog(@"a * c + b = %i",result);

        result = d + a / c;
        NSLog(@"d + a / c = %i",result);

        result = (a - c) * d;
        NSLog(@"(a - c) * d = %i",result);
    }
    return 0;
}

    将代码用vi编辑后使用clang进行编译:



    运行后得到如下输出:


    来分析一下这个程序,包含了最简单的四则元算,只要按照算术运算的法则来算就可以了,优先级在所有编程语言中都是一致的。我们修改一下数值类型,再看下面的程序:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int a=200,b=20;
        float c=50.0,d=8.0;
        
        NSLog(@"a + b = %i",a+b);

        NSLog(@"a * c + b = %f",a*c+b);

        NSLog(@"d + a / c = %f",d+a/c);

        NSLog(@"(a - c) * d = %f",(a-c)*d);

        NSLog(@"-a = %i",-a);
    }
    return 0;
}

    使用vi编辑后编译运行得到如下结果:


    可以看到当数据类型修改后精度改变,那么输出的结果就是精度比较大的类型,这里中间的三个表达式就是float类型的结果,因为有c和d参与了运算。下面来看一下自增和自减运算:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int a=5,b=8;
        
        NSLog(@"a++ = %i",a++);

        NSLog(@"--b = %i",--b);

        NSLog(@"++a * b-- = %i",++a * b--);

        NSLog(@"a-- * b++ = %i",a-- * b++);

        NSLog(@"a = %i, b = %i",a,b);
    }
    return 0;
}

    编译运行之后我们看到下面的结果:


    自增和自减非常具有迷惑性,这里解释一下,初始值a为5,b为8,执行完第一行后a的值变为6,所以第一行是输出5的,第二行先执行b的自减,因为--在前面,那么得到结果是7。第三行中a先自增变为7,然后参与运算,结果得到49,之后b自减为6。此时第四行中a和b先参与运算结果为42,之后一个减一个增,得到第五行的最终结果。
    下面来看求模运算:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int a=5,b=8,c=3,d=2;
        
        NSLog(@"a %% b = %i",a%b);

        NSLog(@"c %% d = %i",c%d);

        NSLog(@"++a %% b = %i",++a % b);

        NSLog(@"a-- %% c++ = %i",a-- % c++);

        NSLog(@"a = %i, b = %i",a,b);
    }
    return 0;
}

    编译运行,得到如下结果:


    来分析一下结果:a%b就是a/b的余数,显然是5,那么c%d得到1。第三行a先自增变成6,然后模8,得到6。第四行a为6时参与运算,而c为3,整除后得到0,然后c自增,a自减。最后a为5而b为8。
    下面来看一下(强制)类型转换,这也是数据类型中的一个问题,程序设计如下:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
    @autoreleasepool{
        int i1,i2=-120;
        float f1=150.625,f2;
        
        i1=f1;
        NSLog(@"i1 = %i",i1);
        f2=i2;
        NSLog(@"f2 = %f",f2);
        f2=i2/100;
        NSLog(@"f2 = %f",f2);
        f2=i2/100.0;
        NSLog(@"f2 = %f",f2);
        f2=(float)i2/100;
        NSLog(@"f2 = %f",f2);
    }
    return 0;
}

    编译运行后,我们得到如下结果:


    第三个输出是-1.000000而不是-1.200000,原因就是整数做除法时小数会丢失,再将结果赋值给浮点型也是丢失结果后再转化精度,其余的就很好理解了。最后一行运算是先进行强制类型转换,用浮点数做除法,小数就会保留下来。这和其它编程语言也是相同的。
    赋值运算符在O-C中也是一样的,比如a+=10,就是a=a+10,将a的数值加10后再次赋值给a。同理,b-=8等同于b=b-8,而a/=b-c就是a=a/(b-c),注意运算的优先级就可以了,这里不再给出具体的示例。
    最后我们结合面向对象的思想来编写一个简单的计算机。首先定义Calculator类,打开XCode,编写如下代码:
//
//  Calculator.h
//  Calculator
//
//  Created by Nan Lei on 12-12-28.
//  Copyright (c) 2012年Nan Lei. All rights reserved.
//
#import<Foundation/Foundation.h>

@interface Calculator : NSObject

-(void) setAccmulator:(double) val;
-(void) clear;
-(double) accmulator;

-(void) add:(double) val;
-(void) subtract:(double) val;
-(void) multiply:(double) val;
-(void) divide:(double)val;

@end

    这是一个计算器类的定义,首先定义设置初始累加数的方法setAccmulator,然后提供一个清零累加数的方法clear,最后给出获取累加数的方法accmulator。对累加数进行四则运算的方法定义很一致,就是方法名不一样,下面来看看这个类的实现:
#import "Calculator.h"

@implementation Calculator
{
    double accmulator;
}

-(void) setAccmulator:(double) val
{
    accmulator=val;
}

-(void) clear
{
    accmulator=0;
}

-(double) accmulator
{
    return accmulator;
}

-(void) add:(double) val
{
    accmulator+=val;
}

-(void) subtract:(double) val
{
    accmulator-=val;
}

-(void) multiply:(double) val
{
    accmulator*=val;
}

-(void) divide:(double)val
{
    accmulator/=val;
}

@end

    实现的过程就没有什么可多说的了,下面编写main函数来进行测试:
int main(int argc, const char * argv[])
{
    
    @autoreleasepool {
        
        Calculator *calc = [Calculator new];
        
        [calc setAccmulator:10.0];
        [calc add:50.];
        [calc divide: 20.0];
        [calc multiply:40];
        [calc subtract:20];
        NSLog(@"The result is %g",[calc accmulator]);
        [calc clear];
        NSLog(@"The accmulator is %g",calc.accmulator);
        
    }
    return 0;
}

    看一下运行结果:

    这里我们使用了new方法来创建对象,经过一系列的算术运算我们得到最终结果。之后运行了清零方法,再次打印值是我们使用了对象名.属性名的方式,就看到最终的结果。
    接下文
  • 大小: 58.8 KB
  • 大小: 82.2 KB
  • 大小: 53.2 KB
  • 大小: 70.1 KB
  • 大小: 68.6 KB
  • 大小: 57.8 KB
  • 大小: 58.9 KB
  • 大小: 66.1 KB
  • 大小: 64.2 KB
4
2
分享到:
评论

相关推荐

    Objective-C编程之道:IOS设计模式解析.pdf

    Objective-C编程之道:IOS设计模式解析.pdf

    Objective-c语言学习-快速入门完整版完整版

    "第二讲 数据类型、运算符和表达式"深入讲解了基本的数据类型,包括整型、浮点型、字符型等,以及各种运算符的使用,如算术运算符、比较运算符、逻辑运算符等,这些都是编程的基础。 "第三讲 控制语句"涵盖了流程...

    Learn Objective-C on the Mac For OS X and iOS 2nd Edition

    3. **Foundation框架**:深入理解Foundation框架,它是所有Objective-C应用的基础,包含各种数据类型、集合类、线程管理等。 4. **Cocoa和Cocoa Touch**:对于OS X和iOS开发分别介绍Cocoa和Cocoa Touch框架,理解 ...

    Objective-C 运行时魔法:动态方法解析与消息机制深度探秘

    1. **基于C语言**:Objective-C继承了C语言的所有特性,包括其语法和数据类型。 2. **动态运行时**:Objective-C使用动态运行时系统,这意味着很多特性(如方法解析、消息转发)在运行时解析。 3. **消息机制**:...

    Object-C语言教程-提供了 Objective-C 的基本语法和一些示例,希望能够帮助你快速入门 Objective-C

    ### Objective-C语言教程知识点...通过本教程的学习,你将能够掌握Objective-C的基本语法,并具备构建macOS和iOS应用程序的能力。Objective-C的应用范围广泛,不仅适用于桌面应用开发,更是iOS应用开发的首选语言之一。

    Objective-C高级编程 iOS与OS X多线程和内存管理_Objective-C_ios_

    《Objective-C高级编程:iOS与OS X多线程和内存管理》是一本深入探讨...通过学习这本书,开发者不仅可以了解多线程和内存管理的基本概念,还能获得解决实际问题的能力,从而编写出更加高效、稳定的iOS和OS X应用程序。

    多态在Objective-C中的魔法:深入探索面向对象编程的高级特性

    Objective-C(通常缩写为Obj-C或简称OC)是一种通用的、高级的编程语言,主要用于Mac OS X和iOS操作系统的应用开发。它是基于C语言的扩展,添加了面向对象编程的特性。 Objective-C的主要特点包括: 1. **面向对象...

    objective-c学习笔记

    1. Foundation框架:提供了Objective-C的基本数据类型、集合类(NSArray, NSDictionary等)、内存管理等基础功能。 2. UIKit框架:是iOS应用开发的核心框架,包含了创建用户界面、处理事件、动画等关键组件。 四、...

    Objective-c学习笔记

    Objective-C是一种基于C语言的面向对象编程语言,它是苹果公司Mac OS X和iOS操作系统的主要开发语言。Objective-C的特性使其成为构建Cocoa框架应用程序的理想选择。以下是对Objective-C关键概念的详细解释: 1. **...

    Objective-C编程入门教程:基础知识、实战案例与项目资源

    首先介绍了Objective-C的基本语法和关键概念,随后通过多个实战案例和项目资源的详细解析,帮助初学者逐步掌握Objective-C的核心知识点和实际应用技能。文档还提供了从环境搭建到具体项目的完整步骤,非常适合想要...

    Object-C语言教程:Objective-C 简介

    Objective-C中的控制结构与C语言基本一致,包括但不限于if语句、switch语句、循环等。 ##### 2.7 属性(Properties) 属性提供了一种简洁的方式来管理类的实例变量。通过属性,可以轻松地设置和获取类的成员变量。...

    探索Objective-C中的Block:强大灵活的代码块

    Objective-C(通常缩写为Obj-C或OC)是一种通用的编程语言,它主要被用于苹果公司的操作系统,如macOS和iOS,以及它们的应用开发框架,如Cocoa和Cocoa Touch。Objective-C是C语言的一个超集,这意味着它包含了C语言...

    windows 下搭建 Objective-C 开发环境

    接下来,您可以开始探索Objective-C的各种特性和功能,逐步深入学习和开发iOS应用程序了。希望这份指南能够帮助您顺利入门,祝您学习进步! 总结来说,在Windows系统下搭建Objective-C开发环境虽然不像在Mac OS X上...

    《Objective-C基础教程》中文版(含源代码)

    《Objective-C基础教程》是一本面向初学者的编程书籍,主要涵盖了Objective-C语言的基本概念、语法和编程实践,尤其适合那些想要踏入iOS应用开发领域的学习者。Objective-C是Apple公司开发的面向对象的编程语言,它...

    C语言主要知识点巩固(学习Objective-C 的前提)

    在掌握了这些C语言基础知识后,你将更好地理解和学习Objective-C,因为Objective-C是在C语言的基础上扩展的面向对象编程语言,它保留了C的大部分语法,并引入了类、消息传递等面向对象特性。因此,牢固的C语言基础...

    Objective-C编程全解最新版.pdf.zip

    1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,因此,理解C语言的基本语法是必要的。Objective-C添加了消息传递机制、类和协议等面向对象特性。 2. **消息传递**:Objective-C中的对象通过发送消息来...

    Objective-C语言入门教程&深入浅出,理论实践相结合.pdf

    Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 ...

    Objective-C基础教程(入门教程).pdf

    9. 动态类型(Dynamic types):Objective-C是一种动态类型语言,这意味着可以在运行时检查和确定对象的类型,并且可以动态地调用对象的方法。 10. 分类(Categories):分类允许开发者将方法的声明和实现分散到...

    Objective-C的语法与Cocoa框架.pdf

    在Objective-C语言和Cocoa框架的关系上,Objective-C是开发语言,而Cocoa是利用Objective-C开发应用程序时所使用的核心框架。Cocoa框架的设计包含了苹果的设计哲学和人机交互的最佳实践,它提供了许多设计模式的实现...

Global site tag (gtag.js) - Google Analytics