ios进制

//

//  main.m

//  LesssonScale

//

//  Created by laouhn on 15/7/23.

//  Copyright (c) 2015年 池海涛. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

    /**

     *  以10为例,不同进制的表示方法

     十进制: 10

     二进制:0b10;

     八进制:010

     十六进制:1x10;

     int  a = 0b100;

     printf("%0x\n",a);

     */

    /**

     *  如何输出进制数:

     %d ------十进制

     %o  ------八进制

     %0x  ------十六进制

     */

    /**

     *  位运算符 :按位 &,按位或 |,按位非 ~,按位异或 ^,左移<<,右移>>

     按位与 & :同1为1,否则为0,经常用于对某一位清零

     

     int a = 5 & 7;

     5--0101

     7--0111

       =0101=5

     printf("a = %d\n", a);

     

     按位或 | : 同0为0,否则为1.经常用于保留某一位.

     int a = 5 | 7;  

     5--0101

     7--0111

       =0111

     printf("a = %d\n", a);

     

     按位异或 ^相同为0,不同为1.

     int a = 5 ^ 7; 

     5--0101

     7--0111

       =0010 = 2

     printf("a = %d\n", a);

     

     按位非 ~;

     char b = ~4;   //4--0000 0100, ~4=1111 1011 -1 ->1111 1010 ->1000 0101 =-5

     printf("b = %d\n", b);

     

     如果是一个有符号位的数,这最高位代表符号位,1 代表 负数, 0 代表正数

     

     数据在内存中存储时,是以补码的形式存储的,正数的补码是正数的本身,负数的补码是

     绝对值 取反 加1.

     

     数据类型的取值范围:

     无符号:

        char    0-----255 (2的8次方减1)

        short   0-----2的16 - 1;

        int     0-----2的32 - 1;

     有符号:

        char    -2的7次方  ---  2的7次方 - 1

        short   -2的15次方 ---  2的15次方 - 1

        int     -2的31次方 ---  2的31次方 - 1

     左移 <<

     unsigned char d = 1;

     printf("左移后的结果%d\n", d << 4 );

     

     右移 >>

     unsigned char e = 255;

     printf("右移后的结果%d\n", e >> 1);

     

     //将100 高四位,低四位互换

     

     unsigned char number = 0b01100100;

     

     //1.先将 number 左移 4位

     unsigned char left = number << 4;

     //2.再将 number 右移 4位

     unsigned char right = number >> 4;

     

     //3.按位或

     

     unsigned char result = left | right;

     

     printf("result = %d\n", result);

     

     将 10010010  奇偶位互换

     unsigned char num = 0b10010010;

     //清零操作使用 按位&, 保留的数位为1 ,清0 数的位为 0

     //1.将奇数位变成偶数位,左移一位

     

     unsigned char life = num << 1;

     

     //2.保留偶数位, 奇数位清0

     

     unsigned char clearJI = life & 0b10101010;

     

     //3.将偶数位变奇数位, 右移1位

     

     unsigned char rightNew = num >> 1;

     

     //4.保留奇数位,偶数位清0

     

     unsigned char clearOU = rightNew & 0b01010101;

     

     //5.按位或 |

     

     unsigned char resultNew = clearJI | clearOU;

     printf("resultNew = %d \n", resultNew);

     栈区内存分配原则:由高到底分配,有低到高存取.

     

     int a = 10;

     

     printf("%p\n",&a);

     

     int b = 10;

     

     printf("%p\n",&b);

     //数组名代表数组的首地址,也就是数组的第一个元素的地址,是一个常量地址

     int a[4] = {9, 5, 2, 7};

     printf("%p\n",&a[0]);

     printf("%p\n",&a[1]);

     printf("%p\n",&a[2]);

     printf("%p\n",&a[3]);

     printf("%p\n",a);

     */

    /**

     *  a=1010

        b=1100

        a=0110

        b=1010

     */

    //交换两个变量

    int a=10,b=12; //a=1010^b=1100;

    a=a^b; //a=0110  //找到a和b中不相同的位

    b=a^b; //b=1010  //原b和ab不相同异或 -> a =1010

    a=a^b; //a=1100  //

    printf("a = %d\nb = %d", a, b);

 

 

    

    

    return 0;

    

}

 

//
//  main.m
//  LesssonScale
//
//  Created by laouhn on 15/7/23.
//  Copyright (c) 2015年 池海涛. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    /**
     *  以10为例,不同进制的表示方法
     十进制: 10
     二进制:0b10;
     八进制:010
     十六进制:1x10;
     int  a = 0b100;
     printf("%0x\n",a);
     */
    /**
     *  如何输出进制数:
     %d ------十进制
     %o  ------八进制
     %0x  ------十六进制
     */
    /**
     *  位运算符 :按位 &,按位或 |,按位非 ~,按位异或 ^,左移<<,右移>>
     按位与 & :同1为1,否则为0,经常用于对某一位清零
     
     int a = 5 & 7;
     5--0101
     7--0111
       =0101=5
     printf("a = %d\n", a);
     
     按位或 | : 同0为0,否则为1.经常用于保留某一位.
     int a = 5 | 7;  
     5--0101
     7--0111
       =0111
     printf("a = %d\n", a);
     
     按位异或 ^相同为0,不同为1.
     int a = 5 ^ 7; 
     5--0101
     7--0111
       =0010 = 2
     printf("a = %d\n", a);
     
     按位非 ~;
     char b = ~4;   //4--0000 0100, ~4=1111 1011 -1 ->1111 1010 ->1000 0101 =-5
     printf("b = %d\n", b);
     
     如果是一个有符号位的数,这最高位代表符号位,1 代表 负数, 0 代表正数
     
     数据在内存中存储时,是以补码的形式存储的,正数的补码是正数的本身,负数的补码是
     绝对值 取反 加1.
     
     数据类型的取值范围:
     无符号:
        char    0-----255 (2的8次方减1)
        short   0-----2的16 - 1;
        int     0-----2的32 - 1;
     有符号:
        char    -2的7次方  ---  2的7次方 - 1
        short   -2的15次方 ---  2的15次方 - 1
        int     -2的31次方 ---  2的31次方 - 1
     左移 <<
     unsigned char d = 1;
     printf("左移后的结果%d\n", d << 4 );
     
     右移 >>
     unsigned char e = 255;
     printf("右移后的结果%d\n", e >> 1);
     
     //将100 高四位,低四位互换
     
     unsigned char number = 0b01100100;
     
     //1.先将 number 左移 4位
     unsigned char left = number << 4;
     //2.再将 number 右移 4位
     unsigned char right = number >> 4;
     
     //3.按位或
     
     unsigned char result = left | right;
     
     printf("result = %d\n", result);
     
     将 10010010  奇偶位互换
     unsigned char num = 0b10010010;
     //清零操作使用 按位&, 保留的数位为1 ,清0 数的位为 0
     //1.将奇数位变成偶数位,左移一位
     
     unsigned char life = num << 1;
     
     //2.保留偶数位, 奇数位清0
     
     unsigned char clearJI = life & 0b10101010;
     
     //3.将偶数位变奇数位, 右移1位
     
     unsigned char rightNew = num >> 1;
     
     //4.保留奇数位,偶数位清0
     
     unsigned char clearOU = rightNew & 0b01010101;
     
     //5.按位或 |
     
     unsigned char resultNew = clearJI | clearOU;
     printf("resultNew = %d \n", resultNew);
     栈区内存分配原则:由高到底分配,有低到高存取.
     
     int a = 10;
     
     printf("%p\n",&a);
     
     int b = 10;
     
     printf("%p\n",&b);
     //数组名代表数组的首地址,也就是数组的第一个元素的地址,是一个常量地址
     int a[4] = {9, 5, 2, 7};
     printf("%p\n",&a[0]);
     printf("%p\n",&a[1]);
     printf("%p\n",&a[2]);
     printf("%p\n",&a[3]);
     printf("%p\n",a);
     */
    /**
     *  a=1010
        b=1100
        a=0110
        b=1010
     */
    //交换两个变量
    int a=10,b=12; //a=1010^b=1100;
    a=a^b; //a=0110  //找到a和b中不相同的位
    b=a^b; //b=1010  //原b和ab不相同异或 -> a =1010
    a=a^b; //a=1100  //
    printf("a = %d\nb = %d", a, b);


    
    
    return 0;
    
}

 

你可能感兴趣的:(ios)