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

  • 相关阅读:
    用自己的话描述wcf中的传输安全与消息安全的区别(一)
    web服务器( nginx )及请求代理
    windows系统安装
    邮箱使用
    常见dos命令总结
    前端技术碰到的陌生单词
    前端工作思考
    table标签详解
    PC 端响应式布局
    HTML标签嵌套规则
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4328413.html
Copyright © 2011-2022 走看看