zoukankan      html  css  js  c++  java
  • 位域及大小端一题

    In little-endian systems, what is the result of following C program ?

    #include <stdio.h>
    
    typedef struct bitstruct {
      int b1:5;
      int :2;
      int b2:2;
      
    } bitstruct;
    
    int main()
    {
      bitstruct b;
      memcpy(&b, "EMC EXAMINATION", sizeof(b));
      printf("%d, %d
    ", b.b1, b.b2);
      
      return 0;
    }

    结果:

    5, -2

    析:
    1)x86系列的CPU都是小端的。
    2)根据位域的定义知 b 占内存空间的9个bit
    3)'E'的ASCII值为 0x45其二进制为 0100 0101,'M'的ASCII值为 0x4D 其二进制为0100 1011
    4)在小端系统中根据高高低低原则(高位字节存放在高地址处,低位字节存放在低地址处),b 中位域b1 存放在内存低地址处,

    b2存放在内存的高地址处。
    5)内存分布
    一个字节的低bit 放在内存的低bit地址处,假设在32位系统中:

      0x00001000  bit0  1
      0x00001000  bit1  0
      0x00001000  bit2  1
      0x00001000  bit3  0
      0x00001000  bit4  0
      0x00001000  bit5  0
      0x00001000  bit6  1
      0x00001000  bit7  0
      0x00001001  bit8  1

    b1 使用 bit0 ~ bit4
    bit5 ~ bit6 空出
    b2 使用 bit7 bit8

    这样
    b1 的二进制值为: bit4 bit3 bit2 bit1 bit 0 -> 00101 -> 5
    b2 的二进制值为: bit8 bit7 -> 10 -> 有符号数转补码表示 10 -> -2

  • 相关阅读:
    人工智能与信号处理--看知乎问答有感.
    nginx 负载均衡及反向代理
    sqlserver 分页查询
    sqlserver 游标使用
    ffmpeg参数编码大全
    C# 阿里云查询、删除文件
    视频分片上传+C#后端合并
    ffmpeg 视频合并
    C# 根据链接提取div内容
    electron-vue 设置cookie
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4328413.html
Copyright © 2011-2022 走看看