黑马程序员_iOS开发C语言基础之二进制内存存储解析与字符操作

来源:互联网 发布:c语言实验室 编辑:程序博客网 时间:2024/05/24 22:45

1、内存中变量的二进制存储

#include <stdio.h>

int main()

{

    //  一个int类型数据占据4个字节、32bit

    // 0000 0000 0000 0000 0000 0000 0000 1100

    // 内存分配地址由大到小,放数据也是由大到小

    // 变量的首地址是地址中最小值

    int number = 12// 1100

    int number2 = 13// 1101

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

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

    return 0;

}



.089 == 0.089  
十六进制字母大小写都行   
96f是错误的,f前只能放小数。
15.4e6 表示15.4*10的6次方   e后要是整数

2 、正负数在内存中的存储形式

#include <stdio.h>

int main()

{

    void putBinary(int);

    putBinary(12);

    putBinary(-12);

    putBinary(13);

    return 0;

}

// 输出一个整数的二进制存储形式

void putBinary(int n )

{

    int bits = sizeof(n)*8;

    while (bits-->0)

    {

        printf("%d", n>>bits&1);

        if (bits%4==0) printf(" ");

    }

    printf("\n");

}


int long long long 所占的字节数和多少位数的编译器有关,可以用sizeof验证

int s = sizeof(int); long long c1 = 123434ll; long int c2 = 12l;

long unsigned int = long unsigned    %u

3、位运算符注意事项

/* 按位与 &

     1001

     0101

     -----

     0001

     */

    /*int a = 9 & 5;

    

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

    return 0;*/

    

    /* 

     按位异或 ^   (搜狗中文环境下符号“……”使用shift+6

     异或可以交换 2^3^4  = 4^2^3

     0异或,数值不变  1异或,相当于把数值按位取反

     9^5^9 = 9^9^5=5   a^b^a == 0^b == b

     */

    /*

     按位取反 ~

     ~0000 0000 0000 0000 0000 0000 0000 1001

      1111 1111 1111 1111 1111 1111 1111 0110

     -10

      按位取反连同符号位也会被取反

     */

    /*

     左移 <<

        很可能把符号位改变

     */

    /*

     右移 >>

      最高位用符号位补充

     */

4、利用两种方式实现两个变量值的交换

// 实现两个变量值交换

    int a = 10;

    int b = 11;

    // 利用算术运算

    /*

    a=b-a; // a --> 11-10

    b=b-a; // b --> 11-(11-10) -->10

    a=b+a; // a --> 10 + 11 -10 -->11

     */

    // 利用按位异或^运算

    a = a^b;  // a --> 10^11

    b = a^b;  // b --> 10^11^11 -->10

    a = a^b;  // a -->10^11^10 -->11

    

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

5、利用位运算判断一个数的奇偶性

// 利用按位&运算符判断奇偶性  奇偶数的最后一位为0,表示偶数,为1时是奇数;与0b1进行按位与&

    int c  = 11;

    c & 0b1 ? printf("奇数\n") : printf("偶数\n);

6、编写一个函数,输出其在内存中的二进制形式

// 编写一个函数,输出整数在内存中的二进制形式

    int d = 9;

    void printBinary(int number);

    printBinary(d);

    return 0;

}


void printBinary(int number)

{

    int temp = (sizeof(number)<<3) -1;

    for(int i=temp;i>=0;i--)

    {

        int m = (number >> i)& 0b1;

        printf("%d",m );

        if(i%4==0)printf(" ");

    }

    printf("\n");

}

7、字符操作注意事项

#include <stdio.h>


int main()

{

    int a = 9;

    // 字符‘A’在内存中存放的ASCII码值65(十进制)的二进制0100 0001形式

    char c = 'A';

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

    printf("%c\n",65);

    printf("%d\n",'A');

    

    char c2 = 'A'+33// 98 'b'

    printf("%c - %d \n",c2 ,c2);

    

    int num = 6// 0000 0110

    char c3 ='6'// 54d = 32+16+4+2  0011 0110

    printf("%d - %d\n",num ,c3);

    /*

     ASCII码表

        字符    ASCII码值

         A         65

         B         66

     

     */

    //char c = ''; // 

    //char c ="A"; // 

    //char c = A;  // 

    //char c =65; // 

    char c4 = 'A';

    // 以下编译通不过,因为'A'就是65

    switch(c) {

            

        case 'A' :

            printf("1\n");

            break;

        case 65:

            printf("2\n");

            break;

    }

    printf("%d\n",'\n');  // '\n'ASCII码值为10

    printf("\\ \" \t"); // 输出"\"  """

    printf("%d\n",'a'-'A'); // aA的差为固定值32

    return 0;

}

char upper(char c )

{

    //如果是小写字母,就转换成大写字母

    if(c>'a'&& c<'z')

    {

        return c - ('a'-'A');

    }

    else

    {

        return c ;

    }

    //差不多的写法

    /*

     if(c>'a'&&c<'z')

        return c-('a'-'A');

    return c;

     */

}


0 0
原创粉丝点击