1. C语言小惑
1. 操作符-按位取反(~)
问题:为什么打印出-1? 解答:
- 在32位操作系统里面,整数存放的位数为32位
整数a=0
00000000000000000000000000000000
11111111111111111111111111111111 ~a
-
一个整数的二进制的表示有3种,分别为原码、反码、补码。而整数在内存中存储的是补码。
-1:
原码:1,0000000000000000000000000000001
(第一位为符号位,1表示负数)
先将原码转换成反码(符号位不变,其余按位取反):
反码:1,1111111111111111111111111111110
补码:1,1111111111111111111111111111111
-
计算机打印的是原码,所以补码1,1111111111111111111111111111111 打印出来为-1.
2. static
- static修饰全局变量,使得这个全局变量只能在自己所在的源文件内部可以使用,其他源文件不能使用!
- 全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部链接属性,但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量。
3. 分模块编写程序
我们建议将函数的声明放在头文件中,函数的定义放在源文件中,假设编写加法函数,则需要建立add.h头文件和add.c源文件
add.h文件中存放函数的声明:
int Add(int x,int y);
add.c文件存放函数的定义:
int Add(int x,int y)
{
return x+y;
}
然后在主程序中包含add.h文件,然后使用即可:
#include <stdio.h>
#include "add.h"
int main()
{
printf("%d",Add(3,2));
return 0;
}
4. 静态库(.lib)生成与使用
加入程序员A要卖给程序员B减法函数Sub(),但是又不想暴露源码给B,于是A将程序生成了为静态库:
-
右击“解决问题方案”,选中最下面的“属性”
在“配置属性”中“配置类型”选中“静态库(.lib)",然后点应用并确定。
ctrl+F5生成一下。在程序的上一层目录可发现“Debug”文件夹,静态库就在此文件夹中。
然后程序员B在程序中包含Sub.h文件,并在主程序中导入静态库即可:
|