从这里链接计算整数的符号
int v; // we want to find the sign of v
int sign; // the result goes here
sign = v >> (sizeof(int) * CHAR_BIT - 1);
// CHAR_BIT is the number of bits per byte (normally 8)
如果我理解正确,如果 sizeof(int) = 4 bytes => 32 bits
MSB 或第 32 位为符号保留。因此,我们右移 (sizeof(int) * CHAR_BIT - 1) 并且所有位都从右侧脱落,只留下索引 0 处的前一个 MSB。如果 MSB 为 1 => v 为负数,否则为正数。
我的理解正确吗?
如果是这样,那么有人可以向我解释一下作者在这里所说的这种特定于架构的方法是什么意思:
这个技巧有效,因为当有符号整数右移时,最左边的位的值被复制到其他位。当值为负时,最左边的位为 1,否则为 0;所有 1 位都给出 -1。不幸的是,这种行为是特定于架构的。
这对于 32 位或 64 位架构有何不同?