欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言——第二章

程序员文章站 2023-10-27 15:18:10
上一篇: 一. 在内存中存储定点数时,一般以其最高位(最左边一位)表示数的符号,0表示正,1表示负。数值是以补码形式存放的。一个正数的补码就是该数的二进制数。一...
上一篇:


C语言——第二章

一.
在内存中存储定点数时,一般以其最高位(最左边一位)表示数的符号,0表示正,1表示负。数值是以补码形式存放的。一个正数的补码就是该数的二进制数。一个负数的补码我们通过下面的方法求得:
(1)先取该数的绝对值
(2)然后以二进制数的形式存放
(3)再对其取反
(4)然后加1
所有负数的二进制补码的最高位必然为1.
显然,无符号的正数的最大值约为有符号的正数的最大值的两倍再加1(因为补码有正0和负0)。在c语言中,实数(浮点型)都是有符号的,不可以使用无符号修饰符。

二.
常用数据类型的长度:(1b = 8bit)
char:1b
short:2b
int:4b
long:4b
float:4b
double:8b
long long:8b

三.
字符类型的数据在内存中是以相对应的ascii码存放。

四.
打印人民币符号printf("y\b=\n");控制代码"\b"使打印头退回一格,回来打印好的y位置再打印字符“=”,两个字符重叠形成人民币符号。当然,这一输出只能在打印机上实现,而不能在显示器上实现。因为显示器没有重叠显示功能。

五.
对一格变量进行显示转换后,得到另外一格类型的数据,但原变量的类型不变。

六.
printf()函数一般形式如下:
int printf(格式控制字符串,输出表达式1,输出表达式2,...);
格式控制字符串由两部分组成:格式说明字段和普通字符。普通字符(包括转义符序列)将被简单的复制并显示。一个格式说明字段将引起一个输出参数项的转换与显示,它是由"%"引出的格式说明字段。格式说明字段与后面的输出表达式参数要对应一致。
%     前缀修饰          域宽        精度            长度修正符          格式码
       -,0,+,空格,#  十进制整数   十进制整数    
需要指出的是:输出数据的实际精度并不主要取决于格式说明字段中的域宽和精度,也不取决于输入数据的精度,而主要取决于数据在机器内的存储精度。例如,一般c语言对float数据只能提供6为有效数字。格式说明字段中所指定的域宽再大,精度再长,得到的多余位数上的数字是毫无意义的。所以,增加域宽与精度并不能提高输出数据的实际精度。

七.
当年困扰自己的一个问题
#include<stdio.h>
int mian(void)
{
int a = 1, b = 2;
printf("x = %d, y = %d\n", ++a + b, ++b + a);
return 0;
}
程序执行结果为x = 5, y = 4
原因在于printf()函数中输出表达式的运算顺序是由右向左的。但是应注意此规则会因编译程序的不同而不同。所以,我们尽量确保在输出时,输出表达式不能相互影响,要确实是一个固定的值。

八.
在输入数据时,实际上并非输入一个数据项就送给一个变量,而是在输入一行字符并按enter键之后才被输入,这一行字符先存放在一个缓冲区内,然后按照scanf()格式说明的要求从缓冲区中读取数据,如果输入数据多于一个scanf()锁要求的个数,那么余下的数据将作为下一个scanf()接着使用。为了保持输入的一致性,可以在格式串中的不同类型转变处添加显式的空白。scanf("%d %c %c %d %lf", &num, &name, &sex, &age, &salary);
当定义中有字段宽度时,scanf()将在缓冲区中的输入流上,按照宽度有间隔的挑取字符。
scanf("%3c%3c", &c, &d); 如果我们输入为abcd,那么c=a, d=d;

九.
在执行getchar()时,虽然是每次读入一个字符,就回显一个字符,但并非从键盘输入一个字符,该字符就立即送给一个字符变量,而是等到按enter后,才将一行字符输入缓冲区,然后getchar()函数从缓冲区中取一个字符送给一个字符型变量。这种情况成为行缓冲。


摘自 飘过的小牛