尽量避免对未知的有符号位执行位操作
在C语言中,如果在未知的有符号上执行位操作,很可能会导致缓冲区溢出,从而在某些情况下导致攻击者执行任意代码,同时,还可能会出现出乎意料的行为或编译器定义的行为。
如下列代码:
#include<stdio.h>
int main(void)
{
int y=0x80000000;
printf("%d",y>>24);//以十进制有符号形式输出。
printf("%u",y>>24);//以十进制无符号形式输出。
return 0;
}
但是由于int类型的最高位是符号位,剩下的31位才用来存储数值,y>>24的结果应该是0xffffff80(负数右移,左补1),当我们以无符号整型输出时,为正数的0xffffff80,以有符号整型输出时,应减一再取反,结果为-128。
以上说明了在不确定int类型时,避免对其进行位操作,若int类型为负数时,对其进行位操作再进行其它操作(如:转成无符号类型),可能会使程序出现BUG。