定点整数乘法c语言实现,定点整数分析(C语言)

问题

7e338bd89299?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

TIM截图20190309205944.png

编译运行环境

Visual C++ 6.0 ,Windows 10

测试代码

#include

int main()

{

short si = -32768;

unsigned short usi = si;

int i = si;

unsigned int ui = usi;

//int a = 15;

printf("变量类型 \t\t占用字节\n");

printf("short\t\t\t%lu \n", sizeof(short));

printf("unsigned short\t\t%lu \n", sizeof(unsigned short));

printf("int \t\t\t%lu \n", sizeof(int));

printf("unsigned int\t\t%lu \n", sizeof(unsigned int));

printf("\n\n");

printf("变量\t真值\t\t十六进制值\n");

printf("si\t%d\t\t%x\n",si,si);

printf("usi\t%d\t\t%x\n",usi,usi);

printf("i\t%d\t\t%x\n",i,i);

printf("ui\t%d\t\t%x\n",ui,ui);

//printf("a\t%x\t\t%x\n",a,a);

return 0;

}

结果

7e338bd89299?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

结果分析

1、首先程序是32位的Windows程序,所以我们先打印出对应的基本数据类型所占的字节。可以看到short为2字节(16位),int为4字节(32位)。

2、然后si的真值为-32768 对应的机器数补码为1000 0000 0000 0000B即8000H,%x的意思是把数据进行16进制的输出(32位格式)。所以我们看到最后的结果是ffff8000,这里的输出结果进行了数位扩展(符号扩展,原值没有进行扩展)的操作:

1000 0000 0000 0000

扩展后的值为

1111 1111 1111 1111 1000 0000 0000 0000

打印出来就是ffff8000H。

3、usi直接接收了si的机器值1000 0000 0000 0000B,unsigned short 没有符号位,所以打印的值位32768。16进制值就是8000,省略了前面的4个0。

4、i的类型为int,是4个字节,接收si的机器值1000 0000 0000 0000B后直接进行符号扩展的操作,然后机器数的值为:1111 1111 1111 1111 1000 0000 0000 0000B ,对应16进制为ffff8000H,真值为-32768。

5、经过上面的一番分析后,ui就比较简单了,ui的机器数的值为:0000 0000 0000 0000 1000 0000 0000 0000B ,对应16进制的值为8000H,真值为32768。

扩展阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值