zoukankan      html  css  js  c++  java
  • 有关十六进制的一道题

    今天有一位同学问了我一道c语言的题目,表示被虐了,问了通神才明白。。。。(通神就是牛!!!)

    题目如下:

    给出下面程序的运行结果:

    #include<stdio.h>
    
    void main()
    {
        int x=0x100100;
        char *p=(char*)&x;
        *p='A';
        p=p+2;
        *p=50;
        printf("%x
    ",x);
    }

    运行结果是    320141
    这是为什么呢?

    大家都知道,int 类型的变量在内存中占 4 个字节(一个字节有8位,所以 x 在内存中是以二进制存储的,即:0000 0000       0001 0000        0000 0001         0000 0000

    而char 类型变量在内存中只占 1 个字节,所以第二条语句运行后,p 指向 x 的最后一个字节,即:0000 0000,然后将这个字节赋值为'A',即十进制中的 65 ('A'的ASCII码值为65),十六进制中的 0x41,此时 x 变为0x100141。

    然后p指向 x 的第三个字节,即:0001 0000   ,将这个字节赋值为50,即十六进制中的 0x32,    x就变为0x320141。

    这道题活用了十六进制的保存方式(其实只是我不会。。。),然后需要注意的是指针取字节的时候是从低位取起的,二进制下,右边为低位,左边为高位。

    在这里添一道题,同样求运行结果,大家看看有没有懂了:

    #include<stdio.h>
    
    void main()
    {
        char*p="abcefghijklmnopqrstuvwxyz";
        int *x=(int *)p;
        x++;
        printf("%c
    ",*(p+2));
        printf("%s
    ",p+2);
        printf("%x
    ",*(x+2));
    }

    结果如下:

  • 相关阅读:
    Java 日期 Api
    Java 基础-反射
    Java 基础-运算符
    Android findBugs
    java-基础练习题3
    java-基础练习题2
    java-基础练习题1
    java-基础练习题
    Java IO 遇到的错误
    Android测试框架-uiautomator
  • 原文地址:https://www.cnblogs.com/yaoyueduzhen/p/4348469.html
Copyright © 2011-2022 走看看