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

wanmeiluck123 2012-08-18 09:23:20
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 取反后是正数
...全文
216 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zc01@ 2012-08-18
  • 打赏
  • 举报
回复
unsigned int型也可以写成unsigned型,c语言规定:-unsigned类型值的含义是0U-unsigned.
值较小的unsigned值减去一个值大的unsigned值,会得到一个负数,然而这个负数并不在unsigned类型表示的值的范围之内,但这个值在int类型表示值(补码)的范围内,需要把这个int类型值的补码形式理解为相同形式的unsigned类型。
yht8708 2012-08-18
  • 打赏
  • 举报
回复
%d是按照有符号型输出,改为%u

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧