C-----------------LessonScale

来源:互联网 发布:从hive迁移到spark sql 编辑:程序博客网 时间:2024/06/06 23:56

#import <Foundation/Foundation.h>


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

{

    /**

     *  十进制:     10

        二进制:     0b10

        八进制:     010

        十六进制:   0x10

     */

//    100     001 000 000 -----   40

    /*

    int a = 0100;

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

     */

    /**

     *  如何输出进制数?

        %d  ----- 十进制

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

        %o  ----- 八进制

     */

    /*

    //一个字节等于8位二进制数.

    //位运算符

    //按位与 & 同为1则为1,否则为0,用于给某一位清零

    int a = 4 & 6;

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

    //按位或 | 同为0则为0,否则为1,用于保留某一位的状态

    a = 4 | 6;

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

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

    a = 4 ^ 6;

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

    //按位非 ~

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

    //数据在内存中存储时是以补码的形式存储的,正数的补码是正数本身,负数的补码是绝对值取反+1.

    //一个字节 就代表8位二进制数.

    */

    /**

     *  数据类型的取值范围:

        无符号:

        char   0 --- 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)

     */

    /*

    char b = ~4;

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

     */

    /*

    unsigned char c = 255;

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

    unsigned char d = 255;

    //左移 <<

    printf("左移结果%d\n", d << 5);

    //右移 >>

    printf("右移结果%d\n", d >> 2);

    //将100高四位与低四位互换.

//    unsigned char number = 0b01100100;

//    //1.先左移4位.

//    unsigned char left = number << 4; //0100 0000

//    //2.再右移4位.

//    unsigned char right = number >> 4; //0000 0110

//    //3.最后按位或.

//    unsigned char result = left | right;

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

    

    //将1001 0010 奇偶位互换

    unsigned char number = 0b10010010;

    //左移1位

    unsigned char left = number << 1;

    //右移1位

    unsigned char right = number >> 1;

    //清零左移后的奇数位

    left = left & 0b10101010;

    //清零右移后的偶数位

    right = right & 0b01010101;

    //按位或之后的结果

    unsigned char result = left | right;

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

    */

    /*

    //两个数交换,不使用第三个变量

    int a = 10;

    int b = 5;

    a = a ^ b;

    b = a ^ b;

    a = a ^ b;

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

     */

    //栈区内存的分配原则.

    //从高到低分配,从低到高存储.

    //地址:内存单元的编号.

    /*

    int a = 5;

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

    int b = 10;

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

     */

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

    /*

    int a[5] = {1, 2, 3, 4, 5};

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

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

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

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

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

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

     */

    int a = -5;

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

    

    

    

    

    return 0;

}


******************************************************************************************************************************************************************************************************


#import <Foundation/Foundation.h>

#import "Scale.h"

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

{

    unsigned char number =0;

    int a = 0;

    int n = 0;

    printf("inpt a number and shifting function:\n");

    scanf("%d%d", &a, &n);

    number = a;

    int resultLeft = LeftLoop(number, n);

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

    int resultRight = RightLoop(number, n);

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

    return 0;

}


*************************************************************************************************


#import <Foundation/Foundation.h>

//    3.输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)。

//    提示:系统自带的移位都是非循环的。

// 左移

int LeftLoop(unsignedchar number, int n);

// 右移

int RightLoop(unsignedchar number, int n);


*************************************************************************************************************


#import "Scale.h"

//    3.输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)。

//    提示:系统自带的移位都是非循环的。

int LeftLoop(unsignedchar number, int n)

{

    n = n % 8;

    unsigned char left = number << n;

    unsigned char right = number >> (8 - n);

    unsigned char result = left | right;

    return result;

}

// 右移

int RightLoop(unsignedchar number, int n)

{

    n = n % 8;

    unsigned char right = number >> n;

    unsigned char left = number << (8 - n);

    unsigned char result = left | right;

    return result;

}


0 0
原创粉丝点击