假设我正在处理4位操作。因此,如果我遇到一个二进制数字,比如
1111
那么我应该推断出什么?是-1还是15?
假设我正在处理4位操作。因此,如果我遇到一个二进制数字,比如
1111
const int8_t number = 0xff;
这是一个值为-1。
由于C语言不能本地处理任意位数的数字,因此没有内置的方法来进行符号扩展。
以下是一种简单的方法:
// Sign-extend a n-bit number into 32 bits.
int32_t extend(uint32_t bits, size_t n)
{
const bool top = bits & ((uint32_t) 1 << (n - 1));
if (top)
{
for (size_t i = n; i < 32; ++i)
bits |= 1 << i;
}
return bits;
}
printf("%d\n", (int) extend(0xf, 4));
它会打印-1
。
11
是多少?”还是“我正在处理16位数字,1111111111111111
是多少?”,难度都是一样的。我不理解你的第二个引用文本。 - unwind