首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为何二进制运算符操作unsgined int a取反后是负数,而操作unsgined char a 取反后是正数

2012-08-30 
为什么二进制运算符操作unsgined int a取反后是负数,而操作unsgined char a 取反后是正数int main(int arg

为什么二进制运算符操作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类型。

热点排行