[英]binary representation in 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
它不应该只是简单地掉负号吗?或者它会绕在限制范围内吗?
最常用于表示负数的方案称为二进制补码 。 在此方案中, -1
具有所有1
位的位模式: 1111 1111 1111 1111
。 如果将其解释为无符号整数(即您的转换含义),则为65535。
换句话说,它确实“只是降低了负号”,除了这样做的效果与您预期的效果不同。
当将int
转换为unsigned int
,如果该值为负数,则结果就好像该负数已加到一个比unsigned int
可以容纳的数值大的数字上。 这是自C90以来由C标准指定的,并且无论机器是否使用二进制补码,二进制补码或带符号的幅值表示形式,均适用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.