C语言数据类型部分总结

第三章  数据和C

1、float类型的数据是遵循IEEE754标准在计算机内部进行存储的,这样带来的问题是存储的时候可能会丢失进度,例如:

# include<stdio.h>

 

int main(void)

{

      float value = 66.6;

printf("%f\n",value);//将%f修改为%.2f 就可以精确输出66.60

return 0;

}

上述程序在vc++6.0中的输出结果是:66.599998!由此可见,在计算机中的浮点数并不是准确存储的。在这里需要对%f做个修改:%.2f就可以准确输出结果!

C中进制的表示:

C语言中,有专门的前缀表明是何种进制

16进制:0x或者0X    显示:%x(显示的字母小写);%X(显示的字母大写)

8进制:0(零)          显示:%0

10进制:普通数字       显示:%d

如果想显示C语言前缀,可以使用%#o,%#x , %#X分别表示0、0x和0X前缀。

 

2、为什么有符号类型int表示的值从-32768-32767,而无符号类型unsigned是0-65535.

因为有符号类型最高位用于表示数值的正负,而无符号类型最高位也表示一位数值,当然比有符号类型的要大。


3、整数的溢出:

无符号数j就像汽车的里程指示牌,当达到最大值就会溢出到起始点,整数i也是一样,他们的区别主要是unsigned int变量j 的起点是0,而int变量的起始点是-2147483648。

Char类型:

Char是字符型,并不是说在计算机中存储字符,因为计算机只能存储01代码,那么是怎么实现存储字符的呢?很简单,char在技术实现上是整数类型,为了处理字符,计算机使用一种数字编码,用特定的整数表示特定的字符。我们通常知道的ASCII码就是如此了。‘A’-65,  ‘a’-97

 

4、inttypes.h头文件

C99标准提供一个可选的名字集合,用于精确的描述相关信息,例如int16_t表示一个16位有符号整数类型,uint32_t表示一个32位的无符号数整数类型,就需要在程序的头文件中包含inttypes.h


5、在默认情况下,编译器将浮点常量当做double类型,假设some 是一个float变量,那么,some= 2.0 * 4.0;2.0和4.0被存储为double类型,通常使用64位进行存储。

Printf()函数使用%f格式说明符打印十进制记数法的float和double数字,用%e打印指数记数法的数字


6、浮点数上溢和下溢:

浮点数上溢:C语言为toobig赋予了一个代表无穷大的特殊值,printf()函数显示此值为inf(infinity)

浮点数下溢:设想一个十分小的数,它是浮点数的最小的一位数,当它除以2,按照除法右移的规定,只能向右右移一位,那么该数最高位就会为0,最低位被舍弃,像这样子就叫丢失进度,此过程叫下溢。


7、浮点数一个有趣、奇怪的事情:

一个数加1后再减去这个数,结果为多少?答案当然是1!但是在浮点数里,却并不一定。

比如:2.0e20为2后面加20个0,如果对它加1,那么变化的是21位,如果要正确计算,至少需要存储21位有效数字,而float数字只有6、7位有效数字,所以这个计算注定是不正确的。如果是2.0e4代替2.0e20,则能得到正确的结果,因为改变的是第5位数字,float数字对此足够精确。


8、Printf函数和scanf函数的参数和易犯的错误:

Printf(“hello,world!\n”);包含一个参数,用双引号括起来,是字符串。不论长度多少,都只算一个参数

Scanf(“%d”,&weight);包含两个参数:“%d”和weight

注意:printf(“%d\n”,float);

使用%d显示float值不会把该float值转换为近似的int值,而是显示垃圾值,与之类似,%f显示int值也不会把该int值转换为浮点值。


9、转义字符:退格:\b;制表符:\t;回车符:\r;警告声:\a;可以参考下例:

# include<stdio.h>

int main(void)

{

      float salary;

      printf("\aEnter your desired monthlysalary: ");//\a表示的发出警笛声

      printf(" $_______\b\b\b\b\b\b\b");//\b表示的是退格,有几个\b,就向前面退几格

      scanf("%f", &salary);

      printf("\n\t$%.2f a month is $%.2f ayear.", salary, salary * 12.0);//%.2f是能让浮点数精确输出。\t是制表符,换行符使得光标移到下一行的起始位置,制表符使光标移到该行中的下一个制表点,一般是第9列。

      printf("\rGee!\n");//\r使得光标移到当前行的起始位置

 

      return 0;

}


10、Printf()函数什么时候真正把输出传送给屏幕?

首先printf()语句将输出传递给一个buffer缓冲区,而C语言在以下的情况下将缓冲区内容传给屏幕:缓冲区满的时候、遇到换行符的售后以及需要输入的时候,而将缓冲区内容传送给屏幕也称为:刷新缓冲区(flushing the buffer).


11、总结:C语言基本的数据类型包含两大类:整数类型和浮点类型。

整数类型:

两个重要特征是:类型的大小以及有符号数还是无符号数,最小的整形是char,其他的类型还有short、int、long、long long类型,最后_bool类型是一种无符号类型,只包含0和1两个值,对应false和true。

整数可以表达为十进制、八进制、十六进制形式。前缀0表示八进制数,前缀0x或者0X表示十六进制。例如:32、040、0x20表示的是十进制、八进制、十六进制的同一个值。字符常量用‘’单引号括起来,字符串常量用“”双引号括起来。

浮点数类型:float、double、long double 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值