c++ - __builtin_bswap16 是否可用于签名短片?
问题描述
我正在尝试交换 16 位有符号数。
所以我写了这个运行良好的逻辑:
// Byte swap signed short
inline int16_t swap_int16( int16_t val )
{
return (val << 8) | ((val >> 8) & 0xFF);
}
但我观察到在 gcc 编译器中,以下交换函数可用于无符号短变量。 https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
Returns x with the order of the bytes reversed; for example, 0xaabb becomes 0xbbaa. Byte here always means exactly 8 bits. .
但我没有找到内置交换功能的签名短。
它在GCC或g++中可用吗?
解决方案
它在 GCC 或 g++ 中可用吗?
没有。记录在案的内置函数列表是详尽的。没有秘密签名的 bswap。
另一方面,也几乎不需要使用内置函数。只要启用了优化器,使用按位运算符与内置函数一样快,并且与 GCC 内置函数不同,按位运算符是标准的并且适用于所有编译器。
请注意,从技术上讲,在 C++20 之前,由于参数类型的符号性,当任一字节的最高位为 1 时,您的函数具有实现定义的行为。幸运的是,我所知道的所有实现都会做你希望他们做的事情。从 C++20 开始,行为是标准的,函数是明确正确的。
推荐阅读
- python - Python try except: InvalidSyntax
- django - 验证失败 - 必填字段。多对多序列化 Django
- elasticsearch - elasticsearch如何识别哪些字段具有共同的聚合值
- arrays - List files that satisfies Rsync Filter
- javascript - My inputs doesn't work wil fullpage scroll
- azure-powershell - 如何获取 azure app service scm 网站或 kudu 控制台的 IP 限制
- xcode - Run script in Xcode build phase
- c# - 如何使 C# .net POCO 线程安全?
- reactjs - 当我在反应 js 中尝试钩子时,状态没有更新?
- ios - Flutter IOS 选择 TeamId