读书人

为何二进制运算符操作unsgined int a取

发布时间: 2012-08-30 09:55:54 作者: rapoo

为什么二进制运算符操作unsgined int a取反后是负数,而操作unsgined char a 取反后是正数
int main(int argc, char* argv[])
{
unsigned int a; //unsigned char a;
a = 127;
a = (unsigned int/char)(~a);
//a += 129;
printf("%d", a);
return 0;
}
请教下:为什么二进制运算符操作unsgined int a取反后是负数,而操作unsgined char a 取反后是正数


[解决办法]
unsigned int型也可以写成unsigned型,c语言规定:-unsigned类型值的含义是0U-unsigned.
值较小的unsigned值减去一个值大的unsigned值,会得到一个负数,然而这个负数并不在unsigned类型表示的值的范围之内,但这个值在int类型表示值(补码)的范围内,需要把这个int类型值的补码形式理解为相同形式的unsigned类型。

读书人网 >C语言

热点推荐