第3章数据和C

来源:互联网 发布:linux free m 详解 编辑:程序博客网 时间:2024/06/06 22:45
3.1示例程序
#include
int main (void)
{
    float weight;
    float value;
    printf("Are you worthyour weight in rhodium?\n");
    printf("Let's check itout.\n");
    printf("Please enteryour weight in pounds:");
    scanf("%f",&weight);
    value = 770 * weight *14.5833;
    printf("Your weight inrhodium is worth $%.2f\n",value);
    printf("You are easilyworth that! If rhodium prices drip.\n");
    printf("eat more tomaintain your value.\n");
    return;
}
 
3.2变量与常量数据
3.3数据:数据类型和关键字
int
long
short
unsigned
char
float
double
________________
signed
void
________________
_Bool
_Complex
_Imaginary
________________
3.3.1整数类型和浮点数类型
3.3.2整数
3.3.3浮点数
整数与浮点数区别
  • 整数没有小数部分:浮点数可以有小数部分
  • 浮点数可以表示比整数范围磊得多的数
  • 对于一些算术运算(例如两个很大数相减),使用浮点数米娜桑损失更多的精度。
  • 因为在任何区间内(比如1.0和2.0之间)都存在无穷多个实数,所以计算机浮点数不能表示区域内所有的值。浮点数往往只是实际值的近似。例如,7.0台能以浮点值6.999999存储。
  • 浮点运行通常比整数运算慢。不过,已以开发出了专门处理浮点运算的微处理器,它可以缩小速度上的差别。
3.4数据类型
3.4.1 int类型
IBM PC兼容机有16位的字,因而采用16位来存储一个int值,取值范围为-32768到32767
一、声明int变量
两种声明方法
int enrs;
int hogs,cows,goats;
两种赋值方法
cows = 112;
scanf();
二、初始化变量
int hogs = 21;
int cows = 32,goats = 14;
int dogs,cats = 94;
三、int类型常量
21、32、14、94都是整数常量
四 、打印int值
#include
int main(void)
{
    int ten =10;
    int two =2;
   printf("Doing it right:");
    printf("%dminus %d is is %d\n",ten,2,ten-two);
   printf("Doing it wrong: ");
    printf("%dminus %d is %d\n",ten);
    return0;
}
使用printf()函数时,格式说明符的数目和要显示的值的数目一定要相同。
五、八进制和十六进制
六、显示八进数和十六进制数
#include
int main (void)
{
    int x =100;
    printf("dec= %d: octal = %o: hex = %x\n",x, x, x);
    printf("dec= %d: octal = %#o: hex = %#x\n",x, x, x);
    return0;
}

3.4.2其它整数类

一、声明其它整数类型

long int estine;

long johns;

short int erns;

short ribs;

unsigned int s_count;

unsigned players;

unsigned long headcount;

unsigned short yesvotes;

long long ago;

二、使用多种整数类型的原因

目前一般的情况是,long long类型为64位,long类型为32位,short类型为16位,int类型为16位或32位(依机器的自然字大小而定)

signed

16位 short和int  -32767~32767

32位 long 和int -2147483647~2147483647

unsigned

16位0~65535

32位0~4294967296

signed

64位long long -9223372036854775807~9223372036854775807

unsigned

64位 long long   0~18446744073709551615

 

整数溢出事例

#include
int main (void)
{
    int i =2147483647;
    unsigned intj = 4294967295;
    printf("%d%d %d\n",i,i+1,i+2);
    printf("%d%d %d\n",j,j+1,j+2);
    return0;
}

三、long常量和long long常量

四、打印short、long、long long 和unsigned类型数

#include
int main (void)
{
    unsigned intun = 3000000000;
    short end =200;
    long big =65535;
    long longverybig = 12345678908642;
    printf("un =%u and not %d\n", un,un);
    printf("end= %hd and %d\n",end,end);
    printf("big= %ld and not %hd\n",big,big);
   printf("verybig= %lld and not %ld\n",verybig,verybig);

    return0;
}

运行结果
un = 3000000000 and not -1294967296
end = 200 and 200
big = 65537and not 1
verybig= 12345678908642 and not 1942899938

Process returned 0 (0x0)  execution time : 0.170 s
Press any key to continue.

 

无符号数3000000000和有符号数-1294967296在内存的表示方法是一样的。

3000000000
10110010110100000101111000000000

-1294967296
10110010110100000101111000000000

在传递函数参数时C自动将short类型的值转换为int类型。两个疑问

1、int类型被认为是计算机处理起来最方便有效的整数类型,所以在short类型不int类型长度不同的系统中,使用int类型值进行参数传递的速度更快。

2、可以使用h修饰符显示一个较长期的整数被截为short类型值的样子。输出的第三行就演示了这一点。把65537按照二进制格式写为一个32位的数字时,它应该是10000000000000001,在printf()中使用%hd说明符将将使它只显示后16位,即显示值1.

最后一行输出完显示了verybig变量的完整值,然后通过使用%ld说明符显示了存储在它的后32位中的值。