【C语言】以深厚地基筑伟岸高楼-基础篇(十一)

数的范围

  • 对于一个字节(8位), 可以表达的是:
  • 00000000 - 11111111
  • 其中
  • 00000000 ——> 0
  • 11111111 ~ 10000000 ——> -1 ~ -128
  • 00000001 ~ 011111111 ——> 1 ~ 127
    整数的范围
  • char : 1字节: -128 ~ 127
  • short : 2字节: -32768 ~ 32767
  • int 取决于编译器(CPU) , 通常的意义是“ 1个字节 ”
  • long : 4个字节
  • long long : 8个字节

unsigned

  • 如果一个字面量常量数想要表达自己是unsigned , 可以在后边加u或者U
  • 255U
  • 用 l 或者L 表示long(long)
  • unsigned 的初衷并非扩展数能表达的范围,而是为了做纯二进制运算,主要是为了移位

整数越界

  • 整数是以纯二进制方式进行计算的, 所以:
  • 11111111 + 1——> 10000000——> 0
  • 01111111 + 1 ——> 10000000——> -128
  • 10000000 - 1——> 01111111 ——>127

探索int数据类型最大数与最大数位

我们可以用一个程序来实现这个测试,代码如下:

#include <stdio.h>
int main(){
	int a = 0 , b = 0;
	while (++a>0)
		; 
	printf("int数据类型最大数是:%d\n",a-1);
	b++;
	
	while ((a=a/10)!=0)
	{
		b++;
	}
	printf("int数据类型最大的数的数位是:%d\n", b);
	return 0;
}

它的运行结果是:
int数据类型最大数是:2147483647
int数据类型最大的数的数位是:10


整数的格式化

整数的输入输出

  • 只有两种形式:int 或者long long
  • %d : int
  • %u : unsigned
  • %ld : long long
  • %lu : unsigned long long

8进制和16进制

  • 一个以0开始的数字字面量是8进制
  • 一个以0x开始的数字字面量是16进制
  • %o用于8进制, %x用于16进制
  • 8进制和16进制只是如何把数字表达为字符串,与内部如何表达数字无关
  • 16进制很适合表达二进制数据,因为4位二进制正好是一个16进制位
  • 8进制的一位数字正好表达3位二进制
  • 因为早期计算机的字长是12的倍数,而非8的倍数

选择整数类型

  • 为什么整数要有那么多种?
  • 为了准确表达内存, 做底层程序的需要
    + 没有特殊需要,就选择int
    现在的CPU的字长普遍是32位或者64位,一次内存读写就是一个int,一次计算也是一个int,选择更短的类型不会更快,甚至可能更慢
    现在的编译器一般会设置内存对齐,所以更短的类型实际在内存种有可能也占据一个int的大小(虽然sizeof告诉你更小)
    unsigned 与否只是输出的不同,内部计算是一样的

浮点类型

类型字长范围
float327
double6415

浮点的输入输出

类型scanfprintf
float%f%f,%e
double%lf%f,%e

科学计数法

-5.67E+16
从前往后依次解释

  • 可以选择的+ 或者- 符号
  • 小数点也是可以选择写或者不写的
  • E可以用e或者E
  • 第二个符号-或者+也是可以省略的,如果省略的话就表示+了
  • 整个词不能有空格噢

输出精度

  • 在%和f之间加上.n可以指定输出小数点后几位,这样的输出是做四舍五入的
    举例:
#include <stdio.h>
int main()
{
	printf("%.3f\n",-0.0049);
	printf("%.30f\n",-0.0049);
	printf("%.3f\n",-0.00049);
	
	return 0;
}

代码执行结果如下:
-0.005
-0.004899999999999999800000000000
-0.000


从代码的执行结果我们可以清晰的看出输出精度的应用是怎样的,并且我们应该如何去运用输出精度来达到我们的输出目的。

超过范围的浮点数

  • printf输出inf表示超过范围的浮点数:±∞
  • printf输出nan表示不存在的浮点数
    浮点的运算没有精度噢

浮点数的内部表达

  • 浮点数在计算时是由专用的硬件部件实现的
  • 计算double和float所用的部件是一样的

选择浮点类型

  • 如果没有特殊需要,只使用double
  • 现代CPU能直接对double做硬件运算,性能不会比floa差,在64位的机器上,数据存储的速度也不比floa慢
    所以我们在选择浮点类型时,一般只使用double类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值