turbo c中的二进制表示

时间:2013-11-17 02:24:04

标签: c++ c turbo-c

我有一个非常基本的查询。 对于以下代码:

int i = -1;
unsigned int j = (unsigned int) i;
printf("%d",j); // I get 65535 the int limit in turbo C 16 bit compiler

它不应该简单地放下负号或者它是否包围了极限?

2 个答案:

答案 0 :(得分:6)

最常用于表示负数的方案称为Two's Complement。在此方案中,-1具有所有1位的位模式:1111 1111 1111 1111。当解释为无符号整数时,这就是你的演员意味着什么,那就是65535。

换句话说,它只是“简单地删除负号”,除非这样做会产生与预期不同的效果。

答案 1 :(得分:1)

int转换为unsigned int时,如果该值为负,则结果就好像该负值已添加到大于unsigned int可容纳的数字1。这是自C90以来的C标准规定,无论机器是使用二进制补码,一个补码还是带符号幅度表示,都可以保持不变。