CY在单片机里是进位标志。CY=0表示无溢出,CY=1表示有溢出。它用于表示加法运算中的进位和减法运算中的借位。如果加法运算中有进位或减法运算中有借位,那么CY位置为1,否则为0。对于无符号数的运算,判断只需CY即可。但如果是有符号数,则不能按CY标志来判断了。
例题:对于16位运算器,65534+3,本该得65537,但因为寄存器只有16位,最高位的那个1丢掉了(进入了CY标志)。结果寄存器中只剩下了1。我们可以说,16位的无符号数加法,65534+3溢出了,溢出后的答案成了1。但是对于有符号整数,情况就不同了。有符号整数采用补码表示法。16位有符号整数不可能表示65534,此时如果机内二进制是11110,程序中认为它是-2,故:机内的二进制的11110+00011,代表的是(-2)+3。请注意,此时的(-2)+3和上文的无符号数65534+3,在CPU的运算器硬件上完全相同,都是得到和为1,而CY标志也为1。有符号数(-2)+3=1并无溢出。故此时的CY标志不能代表它溢出了。
“?”操作符,是三元操作符,它的作用与if else语句作用相似,但是使用有些限制。表达式 1被求值,如果是真,则表达式 2被赋值;如果表达式 1为假,则表达式 3被赋值。
给你举个例子:
int moon,stars;
stars=50;
moon=stars>100? 200: 0;
表达式 1是 stars>100
表达式 2是 200
表达式 3是 0
首先判断表达式 1中的 stars>100是否正确,显然,stars的值是50,不是>100,表达式 1是假的,于是,把表达式 3的0这个值赋给 moon。
如果把上面程序中的 stars=50改成 150,这个时候,表达式 1显然为真,那么 moon就应该赋表达式 2的 200这个值。
判断“?”左边的表达式是否为真,如果为真,取“:”左边的值,如果为假,取“:”右边的值。
在C语言中,`%f`和`%8f`是printf函数的格式控制符,分别代表浮点数和带字段宽度限制的浮点数。
需要注意的是,这些格式控制符不支持整型数据,否则会引发运行错误。如果要输出整型数据,需要使用对应的格式控制符,如 `%d`、`%ld`等。
和其他函数一样,里面可以写参数,不过:
C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。main函数的函数头可写为: main(argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv(第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为: main(int argc,charargv[])
由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢?实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。 DOS提示符下命令行的一般形式为:
C:/>可执行文件名参数参数……;
但是应该特别注意的是,main的两个形参和命令行中的参数在位置上不是一一对应的。因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。例如有命令行为:
C:/>E6 24 BASIC dbase FORTRAN,由于文件名E6 24本身也算一个参数,所以共有4个参数,因此argc取得的值为4。argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。指针数组的长度即为参数个数。数组元素初值由系统自动赋予。
本例是显示命令行中输入的参数。如果上例的可执行文件