c primer plus 专题3:数据和C

1 示例程序

platinum.c

/* platinum.c -- your weight in platinum */
#include <stdio.h>

int main(void)                 
{
    float weight;       /* 你的体重          */
    float value;        /* 相同重量的白金价值 */

    printf("Are you worth your weight in platinum?\n");
    printf("Let's check it out.\n");
    printf("Please enter your weight in pounds: ");

    /* 获取用户的输入                        */
    scanf("%f", &weight);
    /* 假设白金的价格是每盎司$1700            */
    /* 14.5883用于把英镑常衡盎司转换为金衡盎司 */
    value = 1700.0 * weight * 14.5833;
    printf("Your weight in platinum is worth %.2f.\n", value);
    printf("You are easily worth that! If platinum prices drop,\n");
    printf("eat more to maintain your value!\n");

    getchar();

    return 0;
}

编译程序,会出现从“double”转换到“float”,可能丢失数据

原因是 1700.0 从double 转为了 float 类型。

执行结果:

数据类型关键字:

浮点数的存储方式:

特殊的存储方式,决定了浮点数可能会丢失精度。

浮点数的存储格式:0.3141E1。

 

2 数据类型

1 字长:

可以看到,字长实际上是处理器数据总线的宽度,反映了CPU一次能够读取多少位的数据。

2 int

可以看到,int 通常占用一个机器字长的存储空间。16位机(8086)中的 int 为16位,32位机(如stm32)中的 int 为32位。

int 类型变量的声明与初始化

八进制和十六进制

在C语言中,以特定的前缀表示使用哪种进制。如0X或0x前缀,表示十六进制,所以十进制数16,表示成16进制为0X10;类似的,0前缀表示八进制,十进制数16表示成8进制为020。

打印选项:%o 以八进制打印;  %x 以十六进制打印;

如果要显示0和0x前缀,要在转换说明中加#,如%#o  %#x  %#X

/* 以十进制 八进制 十六进制打印十进制数100 */
#include <stdio.h>

int main(void)
{
	int x = 100;

	printf("十进制 = %d\t八进制 = %o\t十六进制 = %x\n", x, x, x);
	printf("十进制 = %d\t八进制 = %#o\t十六进制 = %#x\t十六进制 = %#X\n", x, x, x, x);

	return 0;
}

运行结果:

十进制 = 100    八进制 = 144    十六进制 = 64
十进制 = 100    八进制 = 0144   十六进制 = 0x64 十六进制 = 0X64

其他整型变量

short int 占用的空间可能比 int 少,long int 占用的空间可能比 int 多;

long long int 占用的空间可能比 long int 多,而且该类型至少占据 64 位;

long 常量和 long long 常量

通常情况下,编译器会根据常量的值,来自动确定常量的类型。但有时需要用 long 来存储较小的值,如内存地址。此时,可以通过增加后缀L来强行变为 long 类型。

打印 short  long  unsigned 类型

3 char

1 字符变量的声明

2 转义序列

#include <stdio.h>

int main(void)
{
	printf("Gramps sez, \" \\ is a backslash.\"\n");

	return 0;
}
// 输出
Gramps sez, " \ is a backslash."

%c 打印字符

可移植类型:stdint.h

4 _Bool

布尔类型:_Bool,包含头文件 stdbool.h,布尔类型取值 true 和 false

#include <stdio.h>
#include <stdbool.h>

int main(void)
{
    _Bool logic = true;

    if (logic)
    {
        printf("This is logic \"true\"\n");
    }

	return 0;
}

5 浮点型

1 float 至少能精确到6位有效数字,double 至少能精确10位有效数字,long double 精度至少与 double 相同。

默认情况下,编译器假定浮点型常量是 double 类型的精度。例如,假设 some 是 float 类型的变量,编写下面的语句:

float some = 2.0 * 4.0;

通常,2.0和4.0被存储为64位的 double 类型,使用双精度的乘法计算,然后将乘积截断成 float 类型的宽度。这样做虽然精度更高,但是会减慢程序的运行速度。

在浮点数后加上 f 或 F 后缀可覆盖默认设置,编译器会将 浮点型常量看作 float 类型。使用 l 或 L后缀,可以将浮点型常量看作 long double 类型。如果不加后缀 f ,编译时可能会提示警告如下:

warning C4244: “=”: 从“double”转换到“float”,可能丢失数据

2 打印浮点值

3 类型大小 sizeof

sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。C99提供%zd转换说明,来匹配sizeof的返回类型。一些不支持C99和C11的编译器,可以用%u或%lu代替%zd。

#include <stdio.h>

int main(void)
{
    /* %zd 匹配 sizeof 的返回类型 */
    printf("Type int have %zd bytes.\n", sizeof(int));
    printf("Type float have %zd bytes.\n", sizeof(float));
    printf("Type double have %zd bytes.\n", sizeof(double));

    return 0;
}

6 使用数据类型

类型转换

浮点数(float double)转换成整数(int)类型时,小数部分会直接截断

#include <stdio.h>

int main(void)
{
    int cost = 12.99;

    printf("cost is %d.\n", cost);

    return 0;
}
// 编译提示
“初始化”: 从“double”转换到“int”,可能丢失数据
cost is 12.    // 小数部分直接截断

7 刷新缓冲区

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值