c/c++语言开发共享如何编写一个常量时间函数来将最高有效位复制到所有位

我想在C中编写一个函数,它接受uint8_t的MSB,如果设置了,则返回0xFF ,如果不是0x00 。 简而言之,它返回一个整数,其中所有位都设置为与MSB相同的值。

但我想以完全恒定的时间方式完成它,没有分支,没有数组偏移,只是数学运算,保证总是触摸相同的位数。 理想情况下,没有任何未定义的行为。 如何才能做到这一点?

    怎么样:

     #define uint8_msb_to_all_bits(x) (0xFF * ((x) >> 7)) 

    甚至更好:

     #define uint8_msb_to_all_bits(x) (-((x) >> 7)) 

    这两种方法的工作方式是,如果x是一个8位无符号整数,那么如果设置了x的MSB,则x >> 7为1,否则为0。 剩下的就是将1映射到0xFF,这可以通过乘法来完成,或者在这种特殊情况下,简单地通过否定数来完成。

    (是的, 否定无符号数在C中已明确定义 。)

    关于什么

     - (x >> 7) 

    仅保留MSB,并使用数学否定将其复制到所有位。

    鉴于你的uint8_t的声明:

     uint8_t x = // MSB is either 1 or 0 if `x` depending on the signed value of `x` 

    假设有符号整数的2的补码作弊:

    需要了解更多c/c++开发分享如何编写一个常量时间函数来将最高有效位复制到所有位,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     return (((uint16_t)(int8_t)x) >> 8) & 0xff; 

      以上就是c/c++开发分享如何编写一个常量时间函数来将最高有效位复制到所有位相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979636.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐