【发布时间】:2019-06-24 07:48:18
【问题描述】:
我正在使用 C 语言中的按位和逻辑运算符。我熟悉这些运算符的概念和用途,但遇到了一些问题。
我需要确定一个整数x 是否适合短。我仅限于使用运算符! ~ & ^ | + << >>。此外,我最多只能使用这些运算符中的 8 个。
我从其他几篇文章(比如这篇文章:How to tell if a 32 bit int can fit in a 16 bit short)中知道,像这样的解决方案
!(((((x) & 0xffff8000) >> 15) + 1) & 0x1fffe)
会很好用(感谢 Emil Romanus)。但是,我也被禁止使用不是0x0 和0xff 的任何常量。
我对这里的逻辑很困惑。有什么想法吗?
编辑:我忘了提条件语句也是被禁止的。所以没有 ifs、elses、循环等。
【问题讨论】:
-
!0x0 == 1...!0x0 + !0x0 == 2... 只是说:) -
@pmg ahhhh 我赶上你的漂移
-
首先,您知道您的架构/编译器的
int和short的大小吗?假设sizeof(int) == sizeof(int32_t)和sizeof(short) == sizeof(int16_t)是一个很大的假设。
标签: c architecture binary bit-manipulation