繁体   English   中英

Turbo C中的二进制表示

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM