玩皇子的主播:请大家抽抽时间看看C语言的题目,谢谢!

来源:百度文库 编辑:高校问答 时间:2024/05/10 08:27:04
执行语句printf("%x",-1);屏幕显示ffff
为什么不是-ffff?
我没弄懂!
希望大家侃侃!

在计算机里,负数是用补码表示的,ffff转换为2进制最前面一位是1,这一位代表符号位,为0时是正数,为1时是负数,其它位的规则是补码规则,即取反加1。-1的补码表示:首先把-1表示为1000000000000001,第一位是符号,最后面是数值,然后把除符号位外取反得1111111111111110,补码要再加1,得1111111111111111即16进制ffff

负数在计算机里是以补码形式存放的(补码的知识上网搜一下吧),-1的补码是11111111 11111111."%x"是将参数以无符号十六进制形式输出,而11111111 11111111转成十六进制就是ffff.

你的printf("%X",-1) 括号里面的%X 是什么意思?
不是%d 吗?

-1在计算机中的原码是8001
补码就是符号位不变
取反fffe
再加一就是ffff

1楼对