蓝欧培训--lessonc12[枚举,位运算符,预编译指令,const]

//
//  main.m
//  lessonc12
//
//  Created by 张阳帅 on 15-1-6.
//  Copyright (c) 2015年 张阳帅. All rights reserved.
//

#import <Foundation/Foundation.h>

#define kDeBug

//当一个变量只有固定几个取值的时候,可以定义一个枚举类型
//枚举类型声明了一组常数,将人能看懂的标示符和计算机能看懂的数字建立对应关系
//如果枚举类型不指定常数,默认从0开始, 依次加1
//enum season{
//    spring = 1,
//    summer,
//    autumn = 4,
//    winter
//};

typedef enum Season{
    spring = 1 << 0,//1
    summer = 1 << 1,//2
    autumn = 1 << 2,//3
    winter = 1 << 3 //4

}SEASON;

//typedef enum season SEASON;

int main(int argc, const char * argv[]) {
    //按位 与 & ,有0为0,全1为1
    //作用:把某些二进制位清0,需要清0的跟0与,需要保留的位跟1与
//    int a = 0b11111111;
//    int c = a & 0b00001111;
//    printf("%d",c);
    
    //按位 或 | ,有1为1,全0为0
    //作用:把某些二进制位置1,
//    int b = 0b0110100;
//    int a = b | 0b00001111;
//    printf("%d",a);
    
    //按位 反 ~ ,有1为0,有0为1
//    int a = 0b00000011;
//    int b = ~a;
//    printf("%d", b);
    
    //按位 异或 ^ 相异为1,相同为0
    //用来记录二进制之间的差异
    //功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
    
//    int a = 8,b = 7;
//    printf("a = %d b = %d", a ^ (a ^ b), b ^ (a ^ b));
//    int a = 8,b = 7;
//    a = a ^ b;//a,b的差值
//    b = a ^ b;//b = b 和 a,b的差值得到a的值
//    a = a ^ b;//a = b(现在等于a的值)和a,b的差值得到b的值
//    printf("a = %d b = %d", a, b);
    
    //<<, >>左移,右移运算符
    //<<,左移一位相当于乘2;
    //>>,右移一位相当于除2;
//    unsigned char a = 0b11000001;
//    a = a << 1;
//    unsigned char b = 0b11000001;
//    b = b >> 1;
//    printf("%d",b);
    
    //预编译指令
    //条件编译  作用:按不同条件,编译不同指令
    //1.[#ifdef]2.[ifndef]3.[if]
    
//    int a = 10;
//#ifdef kDeBug
//    printf("%d", a);
//#else
//    printf("%d", a + 5);
//#endif
   
//#ifndef kDeBug
//    printf("hello");
//#else
//    printf("world");
//#endif

//#if 2
//    printf("a");
//#elif 1 + 2
//    printf("b");
//#elif 0
//    printf("c");
//#else
//    printf("d");
//#endif
    
    //枚举
//    SEASON a = autumn | winter;
////printf("a = %d", a);
//    
//    switch ((int)a) {
//            
//        
//        case spring | summer:
//            printf("春天或者夏天");
//            break;
//        case spring | winter:
//            printf("春天或者冬天");
//            break;
//        case spring | autumn:
//            printf("春天或者秋天");
//            break;
//        case summer | autumn:
//            printf("夏天或者秋天");
//            break;
//        case autumn | winter:
//            printf("秋天或者冬天");
//            break;
//            
//        case spring:
//            printf("spring");
//            break;
//        case summer:
//            printf("summer");
//            break;
//        case autumn:
//            printf("autume");
//            break;
//        case winter:
//            printf("winter");
//            break;
//
//        default:
//            printf("sorry");
//            break;
//    }
//    
    
    //const 用于修饰一个变量不能被修改
//    const int a = 5;
    //const 修饰数组,数组里面的每个元素都不能修改
//    const int a[3] = {1,2,5};
    
//int * const p  指针不可以重指向,但是通过指针可以修改指针指向的内容
//    int a = 5, b = 9;
//    int * const p = &a;
//    *p = 8;
////    *p = &b;
//    printf("%d",*p);
    
// int const * p 指针可以做重指向,但是通过指针不可以修改指向的内容
//    int a = 5, b = 8;
//    int const * p = &a;
//    //*p = 5;//error
//    p = &b;
//    printf("%d",*p);

//const int * p 指针可以做重指向,但是通过指针不可以修改指向的内容
//    int a = 5, b = 5;
//    const int * p = &a;
////    *p = 8;
//    p = &b;
    
//const int * const p 指针不可以做重指向,通过指针也不可以修改指向的内容
//    int a = 5, b = 4;
//    const int * const p = &a;
    
//int const * const p 指针不可以做重指向,通过指针也不可以修改指向的内容
//    int a = 5, b = 4;
//    int const * const p = &a;
    
    //const在*前, 通过指针不可以修改指向内容,指针可以重指向
    //const在*后, 指针不可以重指向,但是通过指针可以修改内容
     
    return 0;
}

时间: 2024-08-04 15:10:59

蓝欧培训--lessonc12[枚举,位运算符,预编译指令,const]的相关文章

[转]Delphi预编译指令总结

Delphi预编译指令总结 Delphi作为一个优秀的开发工具,这不仅是由于它开创了"构件 (Component)"时代,影响深远:另一个原因是它拥有非常出色的编译器,Borland(Inprise)公司宣称Delphi具有世界上最快的 编译器,如果你使用过Visual C++和Delphi你会明显体会到这一点.Delphi快速高效的编译器主要来自Object Pascal的严谨,使用Delphi随时都在和编译器交流,大部份情况下不需要我们干涉编译器的运行,但是有时也需要对编译器进行必

C/C++中的预编译指令

工作中遇到的: 一个头文件中的: #pragma warning(disable:4996)#pragma warning(disable:4244)#pragma warning(disable:4267) 不理解意思,遂查? C/C++中的预编译指令 程序的编译过程可以分为预处理.编译.汇编三部分,其中预处理是首先执行的过程,预处理过程扫描程序源代码,对其进行初步的转换,产生新的源代码提供给编译器.预处理过程读入源代码之后,会检查代码里包含的预处理指令,完成诸如包含其他源文件.定义宏.根据条

iOS中的预编译指令的初步探究

看到非常好的两篇技术文,转来方便自己查看. 转自:http://www.cnblogs.com/daiweilai/p/4234336.html 开篇 我们人类创造东西的时候有个词叫做”仿生学“!人类创造什么东西都会模仿自己来创造,所以上帝没有长成树的样子而和人长得一样,科幻片里面外星人也像人一样有眼睛有鼻子……但是人类自己创造的东西如果太像自己,自己又会吓尿(恐怖谷效应),人类真是奇葩:奇葩的我们在20世纪创造了改变世界的东西——计算机(电脑),不用怀疑,这货当然也是仿生学!这货哪里长得像人了

几个预编译指令的用法

转载:痴 狼While there is life there is hope http://www.cnblogs.com/Bolin/archive/2011/02/20/1959120.html 几个预编译指令的用法    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理.在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件.定义宏.根据条件决定编译时是否包含某些代码.要完成这些工作,就需要使用预处理程序.

C语言的预编译,程序员必须懂的知识!【预编译指令】【预编译过程】

由“源代码”到“可执行文件”的过程包括四个步骤:预编译.编译.汇编.链接.所以,首先就应该清楚的首要问题就是:预编译只是对程序的文本起作用,换句话说就是,预编译阶段仅仅对源代码的单词进行变换,而不是对程序中的变量.函数等. 预编译指令的基本知识不作详细介绍,只稍作汇总,重点是后面的我能想到的 使用时的注意事项. 1. 基本内容 预编译指令基本分类如下 类别 指令 预定义符号__FILE__.__LINE__.__DATE__.__TIME__.__STDC__宏#define文件包含#inclu

在EJS脚本内使用“#include”预编译指令

此博客为9925.org的镜像,登录9925.org可以查看到最新博文. 原文出处:http://ily.so/26bMBz 预编译指令是Easton JavaScript脚本解释器对JavaScript语言拓展的重要功能之一,使用预编译指令可以引用外部的JS脚本代码,类似于HTML内的<script>标签引用外部JS脚本. #include语法解释 以“#include”指令开始,一行一个指令,指令后面加不加空格都无所谓,但是为了方便阅读通常情况下都加一个空格. 例如: //引用运行库内的A

C++ 内置宏定义 与 预编译指令

内置宏和预编译指令, 在代码调试.单元测试.跨平台代码中经常会用到.这里记录一下. 1. 内置宏 (文件名,当前行号,当前日期,当前时间,当前执行方法名) __FILE____LINE____DATE____TIME__ __FUNCTION__ 2.预编译指令 可以防止头文件被多次引用 可以方便解决代码跨平台编译问题 可以根据自定义变量灵活执行程序 等等,许多好处 效果可以看代码实例: test.h 1 #ifndef __TEST_H 2 #define __TEST_H 3 4 #incl

C/C++预编译指令

编译程序时,只要遇到 #error 就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的. 下面举个例子: 程序中往往有很多的预处理指令 #ifdef XXX ... #else #endif 当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译: #ifdef XXX ... #error "XXX has been defined"

c/c++中的预编译指令总结

预处理指令提供按条件跳过源文件中的节.报告错误和警告条件,以及描绘源代码的不同区域的能力.使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致.在 C# 中没有单独的预处理步骤:预处理指令按词法分析阶段的一部分处理. 预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有:文件包含,条件编译.布局控制和宏替换4种. 文件包含:#include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文. 条件编译:#if,#ifndef,#ifdef,