【发布时间】:2009-07-21 00:13:46
【问题描述】:
我正在学习big and little-endianness。
1.下面代码中| \的作用是什么?
...
#elif defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
#define htons(A) ((((uint16_t)(A) & 0xff00) >> 8) | \
(((uint16_t)(A) & 0x00ff) << 8))
...
2。代码中(A)的作用是什么?
【问题讨论】:
-
您不需要 mask & 0xff00 或 & 0x00ff - 在第一种情况下,底部 8 位被屏蔽,因为它们从底部移开。在第二种情况下,位溢出并丢失。 (uint16_t)(((uint16_t)(A) >> 8) | ((uint16_t)(A)
-
@Tom Leys 不同意第二种情况。
(( (uint16_t)(A) ) << 8))。A被转换为uint16_t保留其 16 个 LSbits。然后考虑通常的整数提升,例如可能是 32 位int。然后将该值移动 8。不太可能是 OP 想要的。
标签: c endianness