告急44为啥选c求详细过程

img

用"%d",输出0xFFFF(16进制)是以补码的形式转成10进制输出的。
FFFF(16进制) 用二进制表示为
1111 1111 1111 1111 (补码)
负数补码转化为原码就是:补码+1再每位取反

          1111 1111 1111 1111 (补码)
+1 =  (1) 1111 1111 1111 1110  (最前面进位的1在实际运算时会因为进位溢出掉,这里为直观表示负数才保留)
取反= (1) 0000 0000 0000 0001 (原码) =  10进制的 -1

如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮

因为char类型的最大范围是127.
解释:
0XFFFF如果代表一个unsigned int 数据 那么它的值就是 4 294 967 295也就是 无符号整型所能表示的最大值。 0XFFFF如果代表一个signed int 数据 那么它的最左边的一位是1,即它必定是一 个负数。这个值是-1。

0X FFFF如果是一个有符号的数字,因为它的最高位是1,所以这个数是个负数。简单的 在内存中的存储形式为 1111 1111 1111 1111 1111 1111 1111 1111,这个是补码。

根据规则将上面的数减去二进制的1,即减去0000 0000 0000 0000 0000 0000 0000 0001,得到 1111 1111 1111 1111 1111 1111 1111 1110,然后按为取反,得到0000 0000 0000 0000 0000 0000 0000 0001,这就是原码,即数字的二进制表示方式,这个数字就是-1了
如有帮助,望点击本回答右上角【采纳】支持一下。