int main(int argc,char *argv[]) 打印五个星号?

分析首先CPU没有减法操作,需要把减法转为加法运算,

则1-2转为加法操作1+(-2)对应实际正数的补码为自己,负数的补码为其反码+1,

这个结果使用%x输出为实际内存中的数据,

%d输出为转为有符号的结果([11 ]再求补码[00 ]);

则前段计算红色a-b值需要转为4字节运算,而c = a-b;执行2字节的运算(存在截断情况)

这个结果使用%x输出为实际内存中的数据(0xFFFF0002),

c=0x%x两字节[-(-1)] = [-(11111) ] 符号位和数据位重叠,假设扩展为4字节表示,具体值同上,符号位在最高位(这里暂未确认编译器如何处理);

这个结果使用%x输出为实际内存中的数据0x0002([00010]补码同原码);

1.分析减法需要明确补码的使用方式,不能按照数学常识计算1-2=-1。

2.无符号数和有符号数进行算数运算,先转有符号为无符号,然后运算(可能存在截断情况)。

3.负数实际在内存中是以补码形式存在,%d格式输出的不是存储的原始数据,%x输出的才是内存原始数据。

}

这里是输出一个菱形的两种方法

这两个程序得到的结果均如下

}

我要回帖

更多关于 for循环打印星号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信