C语言03-VS中的内存窗口、补码、编码

妖精的绣舞 提交于 2020-01-14 00:14:29

匈牙利命名法

规定了一整套关于函数、变量、面向对象等的命名规范。
变量的命名
局部变量,使用有意义的且有前缀区别类型。

int -n,i
unsigned -u
short -s
double -db, d
char -c, ch
long -l
char* -sz,   str

例如:

int nValue = 0;
char chValue = '\0';
double dbValue = 0.0;
float fltValue = 0.0f;
char* szValue = NULL;

为了代码易读(’\0’,NULL),0.0f表示告诉编译器,这个数字是float类型的(默认是double类型)
复杂变量
用多个英文单词全拼组合,单词之间首字母大写。

int nIsEvenFlag = 0;
double dbTeacherSalary = 0.0;
double dbTeacherSalary = 0.0; 

非局部变量
写在函数内部的为局部、写在外部的变量是全局变量。
全局变量
加“g_”前缀

g_nValue; 

函数命名
除了没有类型前缀以外,和变量命名方式类似。

int IsEvenNumber(int nArg);
void GetUserInput();

补码知识

补码是约定
所有的编码都是约定。例如:ASCII码就是约定。
补码解决负数在计算机内存中表示的问题。
VS中的内存窗口F10启动窗口

左侧灰色数字,表示内存地址:类似于门牌号码,可通过其找到房间。
内存窗口中,地址最小单位是字节
右侧黑色数字表示对应地址处所存储的值

大端方式和小端方式

大端方式和小端方式又称为大尾方式和小尾方式
运行以下代码

int main(int argc, char* argv[])
{
    char chValue = 0x34;
    int nValue = 0x12345678;
    return 0;
}

在内存中的存储方式,顺序是

大端方式:数字的较低位,存放在内存地址的较高地址处
小端方式:数字的较低位,存放在内存地址的较低地址处
举例:对于: 0x12345678,从数字角度看,最低为是:8,但是,从计算机角度看,最小的单位是字节,所以,最低为应该是78。 而通过截图我们可以观察到,0x78出现在较低内存地址处,所以我们的电脑是小端方式。

补码编码方案

就是让所表达的东西和内存中的的数字的映射关系。
其在数值计算过程中,会引入麻烦
编码过程:

  • 如果是一个正数,那么符号位为0,其他位存绝对值
  • 如果是一个负数,对其绝对值【取反加1】
    我们一下来举例(3 bit):
存1:001
存-1:111
正2:010
-2:110

在补码方案中,相反数相加等于0.
取反加1的推导
目标:
a+=0 a+相反数 = 0
而同时:
a+a=11111 a + 取反a = 全11111
在这个基础上,方程两边同时加1
a+a+1=11111+1=0 a + 取反a + 1= 全11111 + 1 = 0

在C语言中看补码

结合补码和小尾观察内存

int main(int argc, char* argv[])
{
    char chValue = ‐2;
    short sValue = ‐2;
    int nValue = ‐2;
    return 0;
}

观察代码,理解约定

int main(int argc, char* argv[])
{
    int nValue1 = 0xFFFFFFFF;
    int nValue2 = ‐1;
    unsigned int nValue3 = 0xFFFFFFFF;
    unsigned int nValue4 = ‐1;
    printf("%d, %d\r\n", nValue1, nValue2);
    printf("%d, %d\r\n", nValue3, nValue4);
    printf("%d, %u\r\n", nValue1, nValue2);
    return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!