在程序中经常使用整数和字符变量,但很少有人知道这些值实际上是如何存储在C中的。 下面是一些例子来理解这一点:
null
- 将正整数值作为 烧焦:
#include <stdio.h>
int
main()
{
char
a = 278;
printf
(
"%d"
, a);
return
0;
}
输出:22
说明: 首先,编译器在内部将278从十进制数系统转换为二进制数系统(100010110),然后只考虑以二进制表示的该数字右侧的前8位,并将该值存储在变量a中。它还将为 溢流 .
- 将负整数值作为 烧焦:
#include <stdio.h>
int
main()
{
char
a = -129;
printf
(
"%d"
, a);
return
0;
}
输出:127
说明: 首先,应该理解负数是以正数的补码形式存储的。编译器在内部将129从十进制数系统转换为二进制数系统(10000001),然后,所有的0将被更改为1,1将被更改为0(即执行1的补码)(01111110),1将通过二进制加法被添加到1的补码中,以给出该数字(011111111)的两个补码。现在,两个补码中最右边的8位将被提取并存储在变量a中。它还将为 溢流 .
注: 同样的概念用于存储整数变量,但有一个区别,即末尾的位数是16(2字节)或32(4字节),因为int变量的大小是2或4字节。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END