
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”观察运算结果,进行验证。
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 时,就分别按照不同类型,进行操作了。
这很正常,没毛病。