C语言 -50的补码是如何求出来的,求过程,我算出来的不一样,负整数赋给无符号整数是如何赋的。

如题所述

C语言 -50 的补码是如何求出来的,求过程,我算出来的不一样。

负整数赋给无符号整数是如何赋的。

----------------

在计算机系统中,数值,一律采用补码表示和存储。

换算公式: 负数的补码 = 负数 + 2^n。

当 n = 16,-50 的补码就是:

  -50 + 65536 = 65486。

i = -50; // 存入-50 的补码,即 65486

printf("%d". i); // 按照“带符号数”输出:-50。

printf("%u". i); // 按照“无符号数”输出:65486。

-------

在声明变量 i 时,可以是“带符号(int 型)”,也可以是“无符号”。

C 语言系统,对不同类型的变量进行计算时,会有不同处理方法。

例如: i = i / 2;  // i 除以 2

如果 i 是“无符号数”,运算的的结果,就是: i = 32743。

如果 i 是“带符号数”(int 型),就得到-25 的补码:65511。

你可以用“%d 和 %u”观察运算结果,进行验证。




温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-05-06

i = -50; //1111 1111 1100 1110,-50 的补码

j = -50; //1111 1111 1100 1110=65486,无符号数

//变量类型不同。 赋值,可以相同。

  

i = i / 2;  //1 1111 1111 1100 111,-25 的补码

// i 是带符号变量,按照补码来操作,结果,仍然是负数。

 

j = j / 2;  //0 1111 1111 1100 111=32743,无符号数

// j 是无符号变量,按照无符号数来操作,结果,是无符号数。

 

赋值时,都可以用“带符号数”来赋值,以补码,存入不同类型的变量。

除以 2 时,就分别按照不同类型,进行操作了。

这很正常,没毛病。