0
点赞
收藏
分享

微信扫一扫

c unsigned与signed转换问题


unsigned int a = 4294967295;
printf("%d\n", a); //=> -1

a 是无符号int最大值表示为​​11111111 11111111 11111111 11111111​​​ 转换成有符号输出 首位1看作是负数 负数输出需要反补码 再取反码
变为 ​​10000000 00000000 00000000 00000001​​ 就是 -1 了

同样 signed转换 unsigned也是如此

int a = -1;
printf("%u \n", a); //4294967295

\u即转换成 无符号输出 就不看首位是1或者0了决定正数还是负数 都按照正数计算
-1在内存中表示为 ​​​11111111111111111111111111111111​​​ 无符号直接计算 结果就是​​4294967295​


举报

相关推荐

0 条评论