整数和字符变量在程序中经常使用,但是鲜为人知这些值在C中的实际存储方式。
以下是一些了解这一点的示例:
- 以正整数值作为char:
#include
int main() { char a = 278; printf("%d", a); return 0; } 输出:22
说明:首先,编译器在内部将278从十进制数字系统转换为二进制数字系统(100010110),然后仅考虑该数字右边以二进制表示的前8位,并将此值存储在变量a中。它还将发出溢出警告。
- 将负整数值用作char:
#include
int main() { char a = -129; printf("%d", a); return 0; } 输出:127
解释:首先,应该理解,负数以其正对数的2补码形式存储。编译器在内部将129从十进制系统转换为二进制系统(10000001),然后将所有零都更改为1,将一个全都更改为零(即做一个补码)(01111110),然后将一个添加到一个补码中通过二进制加法得到该数字的二进制补码(01111111)。现在,将取二进制补码的最右边的8位,并将其原样存储在变量a中。它还将发出溢出警告。
注意:使用相同的概念来存储整数变量,但区别在于,由于int变量的大小为2或4字节,因此末尾的位数为16(2字节)或32(4字节)位。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。