16进制运算 ios_16进制异或运算ios实现 - CSDN
精华内容
参与话题
  • iOS nslog 使用 十六进制输出

    千次阅读 2015-11-01 16:01:18
    1. 数据类型简介及输出 (1) 数据类型简介  ...数据类型简介 : Object - C 数据类型 分为 基本数据类型, 构造类型 和 指针类型;...-- 基本数据类型 : 整型, 字符型, 浮点型 (float 和 do

    http://blog.csdn.net/shulianghan/article/details/38544659

    1. 数据类型简介及输出



    (1) 数据类型简介 


    数据类型简介 : Object - C 数据类型 分为 基本数据类型, 构造类型 和 指针类型;

    -- 基本数据类型 : 整型, 字符型, 浮点型 (float 和 double), 枚举型;

    -- 构造类型 : 数组类型, 结构体类型, 共用体类型;

    -- 指针类型 : 最终要的数据类型, 所有的系统类, 自定义类都是指针;

    -- 空类型 : 空类型只有一个值 nil, 该类型没有名称, 因此没有空类型的变量, 变量不能转换成空类型, 但是空类型可以转换成任何引用类型;



    (2) 数据类型输出


    NSLog()简介 : NSLog 是 Foundation 框架中功能强大的函数, 可以输出任何类型的数据;

    -- 占位符 : NSLog() 函数中各式与 C 语言中大致相似, 第一个参数是加了 @ 的字符串, 后面的参数是用于替换占位符的;


    整型占位符说明 : 

    -- %d : 十进制整数, 正数无符号, 负数有 "-" 符号;

    -- %o : 八进制无符号整数, 没有 0 前缀;

    -- %x : 十六进制无符号整数, 没有 0x 前缀;

    -- %u : 十进制无符号整数;


    字符占位符说明 : 

    -- %c : 单个字符输出;

    -- %s : 输出字符串;


    浮点占位符说明 : 

    -- %f : 以小数形式输出浮点数, 默认 6 位小数;

    -- %e : 以指数形式输出浮点数, 默认 6 位小数;

    -- %g : 自动选择 %e 或者 %f 各式;


    其它形式占位符 :

    -- %p : 输出十六进制形式的指针地址;

    -- %@ : 输出 Object-C 对象;


    占位符附加字符 : 

    -- l : 在整型 和 浮点型占位符之前, %d %o %x %u %f %e %g 代表长整型 和 长字符串;

    -- n(任意整数) : %8d 代表输出8位数字, 输出总位数;

    -- .n : 浮点数 限制小数位数, %5.2f 表示 5位数字 2位小数, 字符串 截取字符个数;

    -- : 字符左对齐;


    示例代码 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. #import <Foundation/Foundation.h>  
    2.   
    3. int main(int argc, charchar **argv)  
    4. {  
    5.     @autoreleasepool{  
    6.         int a = 38;  
    7.         long b = 38;  
    8.         double c = 3.8;  
    9.         double d = 2.3;  
    10.         charchar * oct_c = "Octopus";  
    11.         NSString *oct_oc = @"Octopus"/* 定义字符串, 在字符串前加上 @ 说明是Ovject-C变量, 值赋给一个 NSString 指针 */  
    12.         NSDate *date = [[NSDate alloc]init];  
    13.   
    14.         NSLog(@"%d 十进制整型", a);  
    15.         NSLog(@"%5d 五位十进制整型", a);  
    16.         NSLog(@"%-5d 左对齐的五位十进制整型", a);  
    17.         NSLog(@"%o 八进制整型", a);  
    18.         NSLog(@"%x 十六进制整型\n", a);  
    19.   
    20.         NSLog(@"%ld 长整型", b);  
    21.         NSLog(@"%lx 十六进制长整型\n", b);  
    22.           
    23.         NSLog(@"%f 小数形式输出浮点数", c);  
    24.         NSLog(@"%e 指数形式输出浮点数", c);  
    25.         NSLog(@"%g 以最简短形式输出浮点数", c);  
    26.         NSLog(@"%5f 以五位小数形式输出浮点数", c);  
    27.         NSLog(@"%5.3f 小数行书输出, 一共五位, 小数3位\n", c);  
    28.   
    29.         NSLog(@"%lf 小数形式输出长浮点数", d);  
    30.         NSLog(@"%le 指数形式输出长浮点数", d);  
    31.         NSLog(@"%lg 以最短形式输出长浮点数", d);  
    32.         NSLog(@"%5lf 5位小数形式输出长浮点数", d);  
    33.         NSLog(@"%5.3lf 5位小数形式输出长浮点数, 其中3位是小数\n", d);  
    34.   
    35.         NSLog(@"%s 输出C字符串", oct_c);  
    36.         NSLog(@"%@ 输出Object-C字符串\n", oct_oc);  
    37.   
    38.         NSLog(@"%@ 输出日期", date);  
    39.   
    40.   
    41.   
    42.     }  
    43. }  

    执行结果 

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 02-NSLogDemo.m   
    2. octopus-2:ios octopus$   
    3. octopus-2:ios octopus$ ./a.out   
    4. 2014-08-16 19:32:44.210 a.out[1300:507] 38 十进制整型  
    5. 2014-08-16 19:32:44.212 a.out[1300:507]    38 五位十进制整型  
    6. 2014-08-16 19:32:44.213 a.out[1300:507] 38    左对齐的五位十进制整型  
    7. 2014-08-16 19:32:44.214 a.out[1300:507] 46 八进制整型  
    8. 2014-08-16 19:32:44.214 a.out[1300:507] 26 十六进制整型  
    9. 2014-08-16 19:32:44.215 a.out[1300:507] 38 长整型  
    10. 2014-08-16 19:32:44.215 a.out[1300:507] 26 十六进制长整型  
    11. 2014-08-16 19:32:44.216 a.out[1300:507] 3.800000 小数形式输出浮点数  
    12. 2014-08-16 19:32:44.216 a.out[1300:507] 3.800000e+00 指数形式输出浮点数  
    13. 2014-08-16 19:32:44.217 a.out[1300:507] 3.8 以最简短形式输出浮点数  
    14. 2014-08-16 19:32:44.217 a.out[1300:507] 3.800000 以五位小数形式输出浮点数  
    15. 2014-08-16 19:32:44.218 a.out[1300:507] 3.800 小数行书输出, 一共五位, 小数3位  
    16. 2014-08-16 19:32:44.218 a.out[1300:507] 2.300000 小数形式输出长浮点数  
    17. 2014-08-16 19:32:44.219 a.out[1300:507] 2.300000e+00 指数形式输出长浮点数  
    18. 2014-08-16 19:32:44.219 a.out[1300:507] 2.3 以最短形式输出长浮点数  
    19. 2014-08-16 19:32:44.219 a.out[1300:507] 2.300000 5位小数形式输出长浮点数  
    20. 2014-08-16 19:32:44.220 a.out[1300:507] 2.300 5位小数形式输出长浮点数, 其中3位是小数  
    21. 2014-08-16 19:32:44.220 a.out[1300:507] Octopus 输出C字符串  
    22. 2014-08-16 19:32:44.220 a.out[1300:507] Octopus 输出Object-C字符串  
    23. 2014-08-16 19:32:44.226 a.out[1300:507] 2014-08-16 11:32:44 +0000 输出日期  


    2. 整型



    (1) 整型类型介绍


    四种整型 

    -- short int : 短整型, 占16位, mac 上占 2 字节, ios 上占 2 字节, 范围 -32768(-2^15) ~ 32767(2^15 - 1), 3万;

    -- int : 整型, 占32位, mac 上占 4 字节, ios 上占 4 字节, 范围 -2147483648(-2^31) ~ 2147483647(2^31 - 1), 21亿;

    -- long int : 长整型, 占64位, mac 上占 8 字节, ios 上占 4 字节, (-2^63) ~ (2^63 - 1), 922亿亿;

    -- long long : 占64位, mac 上占 8 字节, ios 上占 8 字节;


    整数赋值 : 整型赋值时注意范围, 如果超出赋值范围, 会出现警告, 数据也会丢失;

    -- 示例程序 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /************************************************************************* 
    2.     > File Name: a.m 
    3.     > Author: octopus 
    4.     > Mail: octopus_truth.163.com  
    5.     > Created Time: 日  8/17 00:44:19 2014 
    6.  ************************************************************************/  
    7.   
    8. #import <Foundation/Foundation.h>  
    9.   
    10. int main(int argc, charchar * argv[])  
    11. {  
    12.     @autoreleasepool {  
    13.         short int a = 50000/* short int 范围是 正负3万, 因此超出范围报错 */  
    14.         int a = 50000;  
    15.   
    16.         NSLog(@"short int a = %d", a);  
    17.         NSLog(@"int a = %d", a);  
    18.     }  
    19. }  

    -- 执行结果 : 

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:~ octopus$ clang -fobjc-arc -framework Foundation a.m   
    2. a.m:14:7: error: redefinition of 'a' with a different type: 'int' vs 'short'  
    3.                 int a = 50000;  
    4.                     ^  
    5. a.m:13:13: note: previous definition is here  
    6.                 short int a = 50000;  
    7.                           ^  
    8. 1 error generated.  


    (2) 进制介绍


    八进制 十六进制赋值 : 八进制由 "0" 开头, 十六进制由 "0x" 或者 "0X" 开头;

    -- 示例程序 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. #import <Foundation/Foundation.h>  
    2.   
    3. int main(int argc, charchar **argv)  
    4. {  
    5.     @autoreleasepool  
    6.     {  
    7.         int a = 010;    /* 八进制赋值 */  
    8.         int b = 0x10;   /* 十六进制赋值 */  
    9.         int c = 10;     /* 正常十进制赋值 */  
    10.   
    11.         NSLog(@"a = %d", a);  
    12.         NSLog(@"b = %d", b);  
    13.         NSLog(@"c = %d", c);  
    14.   
    15.         NSLog(@". . . . . ");  
    16.   
    17.         NSLog(@"a = %o", a);  
    18.         NSLog(@"b = %x", b);  
    19.     }  
    20.     return 0;  
    21. }  

    -- 执行结果 : 

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 03-IntDemo1.m   
    2. octopus-2:ios octopus$ ./a.out   
    3. 2014-08-17 00:58:50.513 a.out[1726:507] a = 8  
    4. 2014-08-17 00:58:50.516 a.out[1726:507] b = 16  
    5. 2014-08-17 00:58:50.516 a.out[1726:507] c = 10  
    6. 2014-08-17 00:58:50.516 a.out[1726:507] . . . . .   
    7. 2014-08-17 00:58:50.517 a.out[1726:507] a = 10  
    8. 2014-08-17 00:58:50.517 a.out[1726:507] b = 10  



    (3) 无符号整型


    无符号整型 : 无符号整型 第一位 不是符号位, 范围比原来要大, 例如 short int 范围是 正负3万, unsigned short int 范围是 0到6万, 将5万赋值给 该类型不报错;

    -- 示例程序 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /************************************************************************* 
    2.     > File Name: 03-IntDemo2.m 
    3.     > Author: octopus 
    4.     > Mail: octopus_truth.163.com  
    5.     > Created Time: 日  8/17 01:02:39 2014 
    6.  ************************************************************************/  
    7.   
    8. #import <Foundation/Foundation.h>  
    9.   
    10. int main(int argc, charchar * argv[])  
    11. {  
    12.     @autoreleasepool {  
    13.         unsigned short int a = 50000;  
    14.   
    15.         NSLog(@"a = %d", a);  
    16.     }  
    17. }  

    -- 执行结果 : 

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 03-IntDemo2.m   
    2. octopus-2:ios octopus$ ./a.out   
    3. 2014-08-17 01:03:35.508 a.out[1745:507] a = 50000  


    3. 字符型


    字符型数据简介 : 

    -- 单个字符表示 : 使用 '' 将单个字符引起来, 便是字符常量, 如 'a', 'b' 等;

    -- 转义字符表示 : 使用转义符号 \ 来指定字符, 如 '\n' 等;

    -- 字符占用空间大小 : 每个字符占用一个字节, 因此 Object-C 不支持中文字符, 因为中文字符都是占 2 ~ 3 个字节;


    转义字符 : 分为特殊空白字符 和 区别 单双引号 和 反斜线的转义;

    -- 退格符 : '\b' ;

    -- 换行符 : '\n' ;

    -- 回车符 : '\r' ;

    -- 制表符 : '\t' ;

    -- 双引号 : '\"' ;

    -- 单引号 : '\'' ;

    -- 反斜线 : '\\' ;


    int 与 char 类型关系 : char 类型可以当做 8 位无符号整数, 取值范围 0 ~ 255;

    -- int 赋值给 char : 将 int 类型赋值给 char 变量的时候, 会自动将类型转为 char 类型;


    char 类型 示例 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /************************************************************************* 
    2.     > File Name: 05-charDemo.m 
    3.     > Author: octopus 
    4.     > Mail: octopus_truth.163.com  
    5.     > Created Time: 二  8/19 21:10:37 2014 
    6.  ************************************************************************/  
    7.   
    8. #import <Foundation/Foundation.h>  
    9.   
    10. int main(int argc, charchar * argv[])  
    11. {  
    12.     @autoreleasepool {  
    13.         char a = 'a';  
    14.         char b = 100;  
    15.         char c = '\n';  
    16.   
    17.         NSLog(@"a = %d", a);  
    18.         NSLog(@"b = %c", b);  
    19.         NSLog(@"c = %d", c);  
    20.     }  
    21. }  

    执行结果 : 

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 05-charDemo.m   
    2. octopus-2:ios octopus$ ./a.out   
    3. 2014-08-19 21:13:24.815 a.out[441:507] a = 97  
    4. 2014-08-19 21:13:24.816 a.out[441:507] b = d  
    5. 2014-08-19 21:13:24.817 a.out[441:507] c = 10  

    4. 浮点型


    浮点型数据类型 : 

    -- float : 占 4 字节;

    -- double : 占 8 字节;

    -- long double : 占 16 字节;


    浮点数表示形式 : 

    -- 十进制形式 : 简单的浮点数, 包含一个小数点, 如 3.8, 38.0, .38 等;

    -- 科学计数法 : 3.8E2 或者 3.8e2 代表 3.8*10^2, 只有浮点数才能使用科学计数法;


    Object-C 与 Java 浮点数区别 : 

    -- Java 浮点数 : Java 的 double 与 float 不同, 浮点数赋值给 float 需要加上 f 后缀;

    -- Object-C浮点数 : 不区分 double 与 float, 一个浮点数 3.8 可以赋值给两种类型的变量;


    浮点数的特殊值 : 

    -- 正无穷大 : 正浮点数除以 0.0 得到正无穷大, 正无穷大都相等, 正整数除以 0.0 得到整数的边界值, short int 除以 0.0 得到 32767(2^15 -1);

    -- 负无穷大 : 负浮点数除以 0.0 得到负无穷大, 负无穷大都相等, 负整数除以 0.0 得到整数的边界值, short int 除以 0.0 得到 -32768(2^15);

    -- 非数 : 0.0 除以 0.0 得到一个非数, 非数与任何数包括其本身都不相等;


    代码示例 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /************************************************************************* 
    2.     > File Name: 06-floatDemo.m 
    3.     > Author: octopus 
    4.     > Mail: octopus_truth.163.com  
    5.     > Created Time: 三  8/20 01:08:35 2014 
    6.  ************************************************************************/  
    7.   
    8. #import <Foundation/Foundation.h>  
    9.   
    10. int main(int argc, charchar * argv[])  
    11. {  
    12.     @autoreleasepool {  
    13.         /* 定义的10位的小数, 使用10位 %g 格式输出, 结果 float 只能接收6位小数 */  
    14.         float a = 3.888888888;  
    15.         NSLog(@"a = %10g", a);  
    16.   
    17.         /* double 类型也只能接收6位有效值 */  
    18.         double b = 388.8888888;  
    19.         NSLog(@"b = %10g", b);  
    20.   
    21.         NSLog(@"5.0 / 0.0 = %g"5.0 / 0.0);  
    22.         NSLog(@"正无穷大对比结果 = %d"5.0/0.0 == 500/0.0);  
    23.   
    24.         double feiNum = 0.0 / 0.0;  
    25.         NSLog(@"0.0 / 0.0 = %g", feiNum);  
    26.         NSLog(@"非数对比结果 = %d", feiNum == feiNum);  
    27.   
    28.         /* 获取边界 */  
    29.         int bound1 = 5/0.0;  
    30.         int bound2 = -5/0.0;  
    31.         NSLog(@"正边界 = %d, 负边界 = %d", bound1, bound2);  
    32.   
    33.     }  
    34. }  


    -- 执行效果 : 

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 06-floatDemo.m   
    2. octopus-2:ios octopus$ ./a.out   
    3. 2014-08-20 01:22:22.712 a.out[776:507] a =    3.88889  
    4. 2014-08-20 01:22:22.714 a.out[776:507] b =    388.889  
    5. 2014-08-20 01:22:22.714 a.out[776:507] 5.0 / 0.0 = inf  
    6. 2014-08-20 01:22:22.714 a.out[776:507] 正无穷大对比结果 = 1  
    7. 2014-08-20 01:22:22.715 a.out[776:507] 0.0 / 0.0 = nan  
    8. 2014-08-20 01:22:22.715 a.out[776:507] 非数对比结果 = 0  
    9. 2014-08-20 01:22:22.715 a.out[776:507] 正边界 = 2147483647, 负边界 = -2147483648  

    -- 注意情况 : 不能将 5/0.0 直接以 %d 形式打印, 否则会报以下错误;

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 06-floatDemo.m   
    2. 06-floatDemo.m:29:44: warning: format specifies type 'int' but the argument has type 'double' [-Wformat]  
    3.                 NSLog(@"正边界 = %d, 负边界 = %d", 5/0.0, -5/0.0);  
    4.                                  ~~                ^~~~~  
    5.                                  %f  
    6. 06-floatDemo.m:29:51: warning: format specifies type 'int' but the argument has type 'double' [-Wformat]  
    7.                 NSLog(@"正边界 = %d, 负边界 = %d", 5/0.0, -5/0.0);  
    8.                                               ~~          ^~~~~~  
    9.                                               %f  
    10. 2 warnings generated.  


    5. 枚举类型



    (1) 定义普通枚举


    定义方式 : 格式 enum enum_name {elem1, elem2, elem3 ...};

    -- 示例 : enum day{Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};


    定义枚举变量 : 格式 enum enum_name var1, var2;

    -- 示例 : enum day today, tomorrow, 注意 today tomorrow 两个变量的取值只能是 day 枚举中定义的值;


    枚举变量赋值 : 格式 variable = elm1 ;

    -- 示例 : today = Sunday; tomorrow = Friday;



    (2) 定义匿名枚举


    匿名枚举格式 : enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} today, tomorrow ;

    -- 说明 : 两个枚举变量 today 和 tomorrow 只能取值 enum 中得枚举值;



    (3) 枚举值简介


    枚举值常量 : 在 {} 中得是枚举常量 或者 枚举元素, 该元素不是变量, 不能对齐进行赋值, 枚举的值按照定义的顺序 0, 1, 2, 3 以此类推;


    枚举值本质 : 枚举值属于无符号整数, 可以使用 %u 占位符打印出来, 其值也能进行大小比较, 和四则运算;


    枚举初值 : 枚举值可以在定义的时候赋予一个初值;



    (4) 枚举示例


    示例程序 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /************************************************************************* 
    2.     > File Name: 07-enumDemo.m 
    3.     > Author: octopus 
    4.     > Mail: octopus_truth.163.com  
    5.     > Created Time: 四  8/21 21:36:09 2014 
    6.  ************************************************************************/  
    7.   
    8. #import <Foundation/Foundation.h>  
    9.   
    10. int main(int argc, charchar * argv[])  
    11. {  
    12.     @autoreleasepool {  
    13.         /* 定义一个枚举 */  
    14.         enum day {Sunday = 6, Monday = 2, Tuesday, Wednesday, Thursday, Friday, Saturday};  
    15.   
    16.         /* 定义枚举变量 */  
    17.         enum day today, tomorrow;  
    18.   
    19.         /* 为枚举变量赋值 */  
    20.         today = Wednesday;  
    21.         tomorrow = Thursday;  
    22.   
    23.         /* 打印枚举值 */  
    24.         NSLog(@"today = %u", today);  
    25.         NSLog(@"tomorrow = %u", tomorrow);  
    26.   
    27.   
    28.         enum {alive, die} state;  
    29.         state = alive;  
    30.   
    31.         NSLog(@"state = %d",  state);  
    32.   
    33.   
    34.     }  
    35. }  

    执行结果 : 

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 07-enumDemo.m   
    2. octopus-2:ios octopus$ ./a.out   
    3. 2014-08-21 21:49:01.414 a.out[664:507] today = 4  
    4. 2014-08-21 21:49:01.416 a.out[664:507] tomorrow = 5  
    5. 2014-08-21 21:49:01.416 a.out[664:507] state = 0  


    6. 布尔型数据


    BOOL 类型简介 : 

    -- BOOL 类型值 : 该类型至右两个值 YES 和 NO ;

    -- BOOL 类型本质 : 该类型本质是 signed char, YES 是 1NO 是 0, 在处理的时候 YES 会被当成真处理NO 会被当成假处理;


    定义 BOOL 类型的系统源码 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. #define OBJC_BOOL_DEFINED  
    2.   
    3. /// Type to represent a boolean value.  
    4. typedef signed char BOOL;   
    5. // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"   
    6. // even if -funsigned-char is used.  
    7.   
    8. #if __has_feature(objc_bool)  
    9. #define YES             __objc_yes  
    10. #define NO              __objc_no  
    11. #else  
    12. #define YES             ((BOOL)1)  
    13. #define NO              ((BOOL)0)  
    14. #endif  

    代码示例 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /************************************************************************* 
    2.     > File Name: 08-boolDemo.m 
    3.     > Author: octopus 
    4.     > Mail: octopus_truth.163.com  
    5.     > Created Time: 二  8/26 00:29:58 2014 
    6.  ************************************************************************/  
    7.   
    8. #import <Foundation/Foundation.h>  
    9.   
    10. /* 判断 a 是否大于 b */  
    11. BOOL isBig(int a, int b)  
    12. {  
    13.     if(a > b)  
    14.     {  
    15.         return YES;  
    16.     }  
    17.     return NO;  
    18. }  
    19. int main(int argc, charchar * argv[])  
    20. {  
    21.     @autoreleasepool {  
    22.         int a = 5;  
    23.         int b = 3;  
    24.   
    25.         NSLog(@"a 是否大于 b : %d", isBig(a, b));  
    26.   
    27.         BOOL c = 1;  
    28.         BOOL d = 2;  
    29.   
    30.         NSLog(@"c = %d", c);  
    31.         NSLog(@"d = %d", d);  
    32.     }  
    33. }  

    执行结果 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 08-boolDemo.m   
    2. octopus-2:ios octopus$ ./a.out   
    3. 2014-08-26 00:40:48.928 a.out[1758:507] a 是否大于 b : 1  
    4. 2014-08-26 00:40:48.930 a.out[1758:507] c = 1  
    5. 2014-08-26 00:40:48.931 a.out[1758:507] d = 2  

    BOOL 类型赋值 : 

    -- BOOL 类型判断 : BOOL 类型会将非 0 数字当做 YES 处理;

    -- 大数字赋值 : 注意 BOOL 类型只有 8 位, 赋值的时候, 只要最后8位不为0, 那么 BOOL 类型就是 YES, 如果后 8 位为0, 那么 BOOL 为 NO;

    -- 示例代码 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /************************************************************************* 
    2.     > File Name: 08-boolDemo1.m 
    3.     > Author: octopus 
    4.     > Mail: octopus_truth.163.com  
    5.     > Created Time: 二  8/26 00:48:05 2014 
    6.  ************************************************************************/  
    7.   
    8. #import <Foundation/Foundation.h>  
    9.   
    10. int main(int argc, charchar * argv[])  
    11. {  
    12.     @autoreleasepool {  
    13.         BOOL a = 256;  
    14.         BOOL b = 512;  
    15.   
    16.         NSLog(@"a = %d", a);  
    17.         NSLog(@"b = %d", b);  
    18.     }  
    19. }  
    -- 编译警告 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 08-boolDemo1.m   
    2. 08-boolDemo1.m:13:12: warning: implicit conversion from 'int' to 'BOOL' (aka 'signed char') changes value from 256 to 0  
    3.       [-Wconstant-conversion]  
    4.                 BOOL a = 256;  
    5.                      ~   ^~~  
    6. 08-boolDemo1.m:14:12: warning: implicit conversion from 'int' to 'BOOL' (aka 'signed char') changes value from 512 to 0  
    7.       [-Wconstant-conversion]  
    8.                 BOOL b = 512;  
    9.                      ~   ^~~  
    10. 2 warnings generated.  
    -- 执行结果 : 

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. octopus-2:ios octopus$ ./a.out   
    2. 2014-08-26 00:50:00.705 a.out[1802:507] a = 0  
    3. 2014-08-26 00:50:00.708 a.out[1802:507] b = 0  

    展开全文
  • iOS 关于枚举的使用

    万次阅读 2013-07-01 20:30:02
    引言: 枚举值 它是一个整形(int) 并且,它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化. 在代码中使用枚举的目的只有一个,那就是增加代码的可读性. 使用: 枚举的定义如下: ...//枚举名称

    引言:

    枚举 它是一个整形(int)  并且,它不参与内存的占用和释放,枚举定义变量即可直接使用,不用初始化.

    在代码中使用枚举的目的只有一个,那就是增加代码的可读性.


    使用:

    枚举的定义如下:

    typedef enum
    {
        //以下是枚举成员
        TestA = 0,
        TestB,
        TestC,
        TestD
    }Test;//枚举名称

    亦可以如下定义(推荐:结构比较清晰):

    typedef NS_ENUM(NSInteger, Test1)
    {
        //以下是枚举成员
        Test1A = 0,
        Test1B = 1,
        Test1C = 2,
        Test1D = 3
    };

    枚举的定义还支持位运算的方式定义,如下:

    等于号后面必须等于1

    typedef NS_ENUM(NSInteger, Test)
    {
        TestA       = 1,      //1   1   1
        TestB       = 1 << 1, //2   2   10      转换成 10进制  2
        TestC       = 1 << 2, //4   3   100     转换成 10进制  4
        TestD       = 1 << 3, //8   4   1000    转换成 10进制  8
        TestE       = 1 << 4  //16  5   10000   转换成 10进制  16
    };
    什么时候要用到这种方式呢?

    那就是一个枚举变量可能要代表多个枚举值的时候. 其实给一个枚举变量赋予多个枚举值的时候,原理只是把各个枚举值加起来罢了.

    当加起来以后,就获取了一个新的值,那么为了保证这个值的唯一性,这个时候就体现了位运算的重要作用.

    位运算可以确保枚举值组合的唯一性.

    因为位运算的计算方式是将二进制转换成十进制,也就是说,枚举值里面存取的是 计算后的十进制值.

    打个比方:

    通过上面的位运算方式设定好枚举以后,打印出来的枚举值分别是: 1 2 4 8 16

    这5个数字,无论你如何组合在一起,也不会产生两个同样的数字.

    手工的去创建位运算枚举,还有稍微有点花时间的,好在Apple已经为我们准备的uint.所以,用下面这种方式来初始化一个位运算枚举吧:

    typedef NS_ENUM(uint, Test)
    {
        TestA,
        TestB,
        TestC,
        TestD,
        TestE  
    };




    多枚举值 赋值方式如下:

    Test tes = (TestA|TestB);

    判断枚举变量是否包含某个固定的枚举值,使用前需要确保枚举值以及各个组合的唯一性:

    NSLog(@"%d %d %d %d %d",TestA,TestB,TestC,TestD,TestE);
    Test tes = (TestA|TestB);
    NSLog(@"%d",tes);
    NSLog(@"%d",(tes & TestA));
    
    if ((tes & TestA)) {
        NSLog(@"有");
    }else
    {
        NSLog(@"没有");
    }
    NSLog(@"%d",(tes & TestB));
    if ((tes & TestA)) {
        NSLog(@"有");
    }else
    {
        NSLog(@"没有");
    }
    
    NSLog(@"%d",(tes & TestC));
    if ((tes & TestC)) {
        NSLog(@"有");
    }else
    {
        NSLog(@"没有");
    }
    如果 没有包含,将返回0, 0表示false NO 则进入else

    也可以随时为枚举变量累加某个值,但是要自己控制不要添加已经加入过的枚举值, 枚举变量的值不会有变动,但这样将会误导阅读代码的人

    tes |=TestC;


    有累加,自然有累减了,如果累减不存在的枚举值, 那么本次累减的枚举值,会自动累加上去.

    tes^= TestE;



    以上,差不多就介绍完了, 如果有什么疑问,欢迎提问.












    展开全文
  • 十六进制中,快速取某位数值

    千次阅读 2015-10-22 01:34:33
    如: unsigned int i = 0x12345678; 取得第三位的数值?(现在是 3) 可以这样:(i& 0x00F00000)>>20 Mark: 20 = 5 * 4 2^4 = 16 (进制) 

    如:


    unsigned int i = 0x12345678;


    取得第三位的数值?(现在是 3


    可以这样:(i& 0x00F00000)>>20


    Mark:

    20 = 5 * 4

    2^4 = 16 (进制)

    
    展开全文
  • Android/iOS及设计中ARGB颜色值百分比透明度...常见的颜色是RGB表示的,就比如上面的蓝色0xFF0000FF,这个颜色值是16进制表示的,其中0x后面接着的两个16进制数字‘FF’就是ARGB中的‘A’,即alpha。A表示该颜色的不...
    Android/iOS及设计中ARGB颜色值百分比透明度换算


    设计上经常要求对一个颜色值进行一定百分比的透明度,比如给定一个颜色0xFF0000FF(蓝色)要求80%透明,该如何处理呢?80%透明的蓝色值是多少呢?
    常见的颜色是RGB表示的,就比如上面的蓝色0xFF0000FF,这个颜色值是16进制表示的,其中0x后面接着的两个16进制数字‘FF’就是ARGB中的‘A’,即alpha。A表示该颜色的不透明度。
    A = 00(转为十进制是0)是完全透明;A = FF(转换为十进制是255)是完全不透明。
    接着到的后面的每两位表示一个颜色,RGB(R,red;G,green;B,blue)。A值控制着对后面颜色的透明度处理。
    计算机中表示颜色的透明度范围是(0 ~ 255,即16进制的00-FF)。0(00)表示完全透明。255(FF)表示完全不透明。
    其实透明和不透明是一个硬币的两面,描述的都是一回事。比如说把一个颜色透明80%,换一个角度说是把这个颜色不透明20%。
    假设设计要求对某一个颜色的透明80%,也就是说不透明度20% ( 1 - 80% = 20% ),那么就是255 x 20% = 51。51是十进制数字,转为十六进制表示是:33。
    此时就可以直接用ARGB表示80%透明后的此种颜色值为:
    0x33xxxxxx (最后面的6位即RGB值)
    此时,如果是在Android里面,就可以直接把这个颜色值写到xml布局里面,达到透明80%的设计要求。
    但是有时候,你可能只能拿到一个具体的int整数型颜色值比如:0xFF0000FF ,没法手动设置0x后面的两位十六进制的不透明度控制值。可现在又要求你在代码运行时动态的对该颜色值进行80%的透明度换算,那怎么办?此时可通过&与运算获得。
    比如,已知80%透明度的十六进制值是33。那么就让原始颜色值和0x33FFFFFF(即0x33拼接六位FFFFFF)进行&与运算,例如:
    int oldColor = 0xFF0000FF; //原始颜色
    int newColor = oldColor & 0x33FFFFFF;
    此时获得的动态计算结果newColor就是80%透明后的颜色值。
    下面是一些常见的透明度16进制表,有了此表,基本可以满足常见的透明渐变颜色处理,不管是动态的还是静态的,静态的就在原始颜色前加上表中的十六进制值,如果是动态的,就按上面说的&与运算获得:

    透明度	16进制值
    100%	00
    95%	0D
    90%	1A
    85%	26
    80%	33
    75%	40
    70%	4D
    65%	59
    60%	66
    55%	73
    50%	80
    45%	8C
    40%	99
    35%	A6
    30%	B3
    25%	BF
    20%	CC
    15%	D9
    10%	E6
    5%	F2
    0%	FF


    展开全文
  • 负数取反

    千次阅读 2019-02-16 22:18:45
    先将初始数值转换成二进制数,再取得二进制数的补码,之后对补码的每一位(包括第一位的符号位)进行运算:即将0变为1、将1变为0。得到的是最终结果的补码(到达这一步后所得的二进制数为正数,由于正数的原码、反码...
  • iOS十六进制和字符串的相互转换

    千次阅读 2018-11-08 20:37:46
    iOS十六进制和字符串的相互转换
  • 小护士读书笔记系列之《深入理解计算机系统》第二章信息的表示和处理(一) 欢迎来到小护士读书笔记系列之《深入理解计算机系统》第二章信息的表示和处理(一);本文与第一章不同,因原书书写篇幅从第二章开始就变...
  • 2.IEEE 64位浮点数格式 ...例如:我们收到一个数的格式是 3F F0 6F 80 00 00 00 00,那么它的二进制格式是: 0011 1111 1111 0000 0110 1111 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 这时我们就可
  • C++输出格式控制

    千次阅读 2018-08-11 16:12:31
    前言 输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。尽管cin和cout不是C++本身提供的语句,但是...
  • iOS自定义协议中的byte使用

    千次阅读 2018-12-10 15:12:16
    自定义的简单协议一般包括消息头部,消息码,消息体,校验码和尾部,一个项目里面用到的头部和尾部一般都是固定的,消息码用来标识是哪一条消息,校验码用来校验数据完整性 在一些需要兼容多端的开发的时候,可能会遇到...
  • float与double类型区别比较

    万次阅读 2012-07-31 17:07:59
    单精度浮点数在机内占4个字节,用32位二进制描述。 双精度浮点数在机内占8个字节,用64位二进制描述。 浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。 数符占1位二进制,表示数的正负...
  • 进制转换与位运算

    2014-01-06 11:36:49
    16进制数: 1.一个16进制数,使用4位表示 2.二个16进制数,使用1个字节 3.四个16进制数,表示1个字符(通常一个字符占用二个字节) 内存地址表示法: 1.对象在内存中的地址,使用8个16进制数,占用4个字节, 2.
  • C++ 输入输出流中控制符的用法

    千次阅读 2011-10-30 21:09:27
    如果使用了控制符,程序开头除了加tream>头外,还要加>。 输入输出流的控制符 ...设置整数为十进制 ...设置整数为n进制(n=8,10,16) setfill(n) 设置字符填充,c可以是字符常或 字符变量
  • 进制位移操作,位运算

    千次阅读 2019-01-22 12:51:46
    即0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算运算。 我们每一种语言最终都会通过编译器转换成机器语言来执行,所以直接使用底层的语言就不需要便编译器的转换...
  • private static String hexXOR(String hex1, String hex2){ BigInteger i1 = new BigInteger(hex1, 16); BigInteger i2 = new BigInteger(hex2, 16); BigInteger res = i1.xor(i2); return res.t...
  • 这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cout来完成一切需要的格式化输入输出...
  • 在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。  一、ASCII 输出  为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用...
  • iOS enum 定义与使用

    千次阅读 2013-04-02 09:03:06
    首先要知道的是,枚举值 它是一个整形(int) 并且,它不参加内存的占用和释放枚举定义变量即可直接使用,不用初始化. 枚举的定义如下: typedef enum { //以下是枚举成员 TestA = 0,  TestB,  ...
  • 实现任意进制(2—32)转换

    千次阅读 2020-01-01 23:10:42
    本程序借助10进制数为中介数据,实现进制进制数的常规转换(2-36进制范围) 需要注意的是,数值范围不可超出 long long int 所表示的范围,即所输入需要为正数,且要小于 (2^63) - 1 . 若需要负值数据,只需要处理第...
1 2 3 4 5 ... 20
收藏数 5,406
精华内容 2,162
关键字:

16进制运算 ios