我有一个非常基本的查询.对于以下代码:
int i = -1;
unsigned int j = (unsigned int) i;
printf("%d",j); // I get 65535 the int limit in turbo C 16 bit compiler
Run Code Online (Sandbox Code Playgroud)
它不应该只是放下负号或者它是否包围了极限?
最常用于表示负数的方案称为Two's Complement.在这个方案中-1有所有1位的位模式:1111 1111 1111 1111.当解释为无符号整数时,这就是你的强制转换意味着什么,那就是65535.
换句话说,它只是"简单地删除负号",除非这样做会产生与预期不同的效果.