zoukankan      html  css  js  c++  java
  • #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)

    原文

    功能:

    首先,sizeof(int)肯定是2的次方数,比如32位是4,64位是8

    ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) 
    的意思就是,如果sizeof(n)是sizeof(int)的倍数,则保持不变,否则返回最小的,大于sizeof(n)的,sizeof(int)的倍数。
    比如,如果sizeof(int)是4,那么sizeof(n)是1-4的时候返回4,5-8的时候返回8,以此类推

    实现:

    首先sizeof(int)写成2进制是1后面若干个0,假设是n个0
    sizeof(int) - 1 就是n个1,
    取非再和前面的数取与就是清除掉前面那个数的后面n比特。
    如果sizeof(n) 后面n比特都是0,那么加sizeof(int)-1不进位,相当于加上再清除掉。
    如果sizeof(n) 后面n比特至少有1位是1,那么加了之后会往前进1,相当于sizeof(n)  右移n位,加1,再补充上n个0。

    例子:

    int - 4                 : 0000 0100    //n=2

    sizeof(int) - 1             : 0000 0011

    ~                   : 1111 1100

    如果sizeof(n) 后面n比特都是0       :  xxxx xx00   + 0000 0011 = xxxx xx11 然后后两位清零 -> xxxx xx00   //4的倍数

    如果sizeof(n) 后面n比特至少有1位是1  : xxxx xx01 + 0000 0011 == 00xx xxxx + 0000 0001 再补零

  • 相关阅读:
    Splunk_转发器配置_AD
    Splunk SPL 时间转换
    Splunk_索引自动清理历史数据
    Python 备查 线程池
    Splunk_SPL 排除搜索结果
    Splunk_SPL 查询时间范围
    质量的分级
    各类BOM
    Jmeter负载测试的注意事项
    MEM的面试记录
  • 原文地址:https://www.cnblogs.com/hei-hei-hei/p/7445003.html
Copyright © 2011-2022 走看看