芯片验证工程师除了学习SV/UVM/Verilog之外,还必须懂一些c语言。

1,c语言由函数组成,但是只能有一个主函数main(),并且主函数main后面的原括号不可以省略,圆括号中的内容可以省略。
如下是一个空函数,没有什么具体含义:
main()
{
}
2,在c语言中,程序的执行总是从主函数开始,最后在主函数中结束。但是一个c程序可以包含多个函数,只有一个主函数,其他为子函数。这与SV中的在一个类中实例另一个类中有异曲同工之妙。
3,C语言中函数体左括号表示开始,右括号表示结束。
4,scanf和printf是c语言中标准的输入输出函数,如scanf("%d,%d"&x,&y);”&x,&y表示对x,y变量取地址,即从键盘上输入的两个数,输入到变量x和y所标识的内存单元中。在c程序中,不一定要使用scanf函数输入,对没有输入要求的程序可以直接使用printf函数输出,如下:
#include void main()
{
printf("您好,世界!\n");
}
#include
#include
void main()
{
int x,y,z;
printf("请输入直角边x和y的值:\n");
scanf("%d,%d",&x,&y);
z=(x*y)/2;
printf("直角三角型的面积为%d\n",z);
}

常量包括整型常量、实型常量、字符型常量、字符串常量、符号常量。
整型常量:十进制、八进制、十六进制
实型常量:小数形式,指数形式
字符型常量:单引号括起来的单个字符构成,如'a','1','v'
字符串常量:由一对双引号括起来的字符序列组成,如"a","abc"
符号常量:宏定义,格式:#define 标识符 常量,如:#define PRICE 30,符号常量为全局常量,在且在函数体中不能再赋值。
其中,字符常量占一个字节的内存空间,字符串常量在内存存储时由系统自动在存储的所有字符尾部添加串结束标记'\0',因此字符串常量占的内存字节数等于字符串中包含的字符个数加1。
此处与SV的区别为:SV中的字符串使用动态存储的方式,且字符串结尾不带标识符null,因此使用字符'\0'的操作均会被忽略,即SV中的字符串所占据的空间为0到N-1,而c语言中占据的空间为0到N,其中第N位为操作符'\0'
区分变量名、变量值和变量地址

其中,程序中的所有数据都是采用二进制的形式进行计算存储的。
不同的操作系统同一个类型的关键字表示的变量占用的自存的大小是不一样的。如int a,a变量在VC中占用4个字节(byte),但是在Turbo C中占用2个。计算内存大小可用关键字sizeof()关键字。
#include void main()
{printf("%d\n",sizeof(int));printf("%d\n",sizeof(short));printf("%d\n",sizeof(float));printf("%d\n",sizeof(short int));}

#include void main()
{int a,b,c,d;unsigned u;a=12;b=-24;u=10;c = a+u;d = b+u;printf("a+u=%d,b+u=%d\n",c,d);}

可以看到,有符号遇到无符号,一般会将无符号调整为有符号。
此处可以和FPGA中32bit的单精度浮点数相呼应。在FPGA中浮点数的表示形式有单精度浮点数、双精度浮点数,还有的处理器可以做到80bit、120bit的浮点数运算。
c语言中实型变量为单精度(float型)、双精度(double型)和长双精度(long double 型).

指数表示的含义:

6,数据的舍入误差
#include void main()
{float a,b;a = 123456.789e5;b = a+20;printf("%f\n",a);printf("%f\n",b);
}

float 类型表示小数点后有效位为6位,上述a的取值范围已经超出了float类型的取值范围,因此系统会自行对其进行取舍,进而产生舍入误差。
视频:002第二章 数据类型,运算符和表达式01_哔哩哔哩_bilibili
书:C语言程序设计
下一篇:RecyclerView流程学习