#include <stdio.h>
int main()
{
char a = 30;
char b = 40;
char c = 10;
printf ("%d ", char(a*b));
char d = (a * b) / c;
printf ("%d ", d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生正常的int值,如果127 > x > -127
是溢出值,则产生其他值.我无法理解如何计算溢出值.在这种情况下为-80.谢谢
这里的诀窍是如何表示数字.看看2的补充.30*40的二进制是1200或10010110000 base 2.但是我们的char只有8位,因此我们切断前导100(以及之前的所有隐含的0).这让我们失望了1011000.
请注意前导1.在2s补码中,您的计算机可能如何存储值,这表示负数.11111111是-1,11111110是-2,依此类推.如果下降到1011000,我们到达-80.
也就是说,如果我们将1011000转换为2s补码,我们将留下-80.
你可以手工做2s补充.取值,删除前导符号位并交换其他值.在这种情况下10110000变为01001111二进制,这将是79.将其变为负数并再删除一个,因为我们不从零开始,我们在-80.
| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |