REPEAT_BYTE(x)宏

位置:include/linux/kernel.h

定义:

#define REPEAT_BYTE(x)  ((~0ul / 0xff)*(x))

作用:结果看下面,作用未知,好像是为了一个叫:word_at_a_time的宏,哎。

重点1:什么是0UL

UL是c语言中的常量后缀,用于整型常量。字母U代表unsigned,字母L代表Long,0UL表示这个整型常量0的类型为无符号长整型。

~0UL就是对该数进行求反运算,在64位机子上,结果是:0Xffffffffffffffff(共16个f)

重点2:二进制除法

因为2进制只有2个数,除0是非法的,所以只能除1,那么:0Xffffffffffffffff / 0Xff = 0X0101010101010101

 重点3:二进制乘法

虽然x是未知数,但最终均以二进制形式表达。假设:x=12,也就是16进制的c,即:x=c,那么整个表达式的结果:0XC0C0C0C0C0C0C0C

为啥要转换为16进制呢?答案是二进制的乘法太抽象了也太长太麻烦了,所以转换为16进制计算更方便和省事。

原文地址:https://www.cnblogs.com/litifeng/p/7729276.html