当前位置:首页 > 课程体系 > 正文

002 基本数据类型

计算机存储单位

计算机存储数据的大小以不同的单位计量,这些单位之间的换算关系基于二进制,具体如下:
  • 基本换算关系
    之所以采用 1024 作为换算系数,是因为计算机使用二进制计数,而  。
    • 1TB = 1024GB

    • 1GB = 1024MB

    • 1MB = 1024KB

    • 1KB = 1024B (B 代表字节,是存储信息的基本单位)

  • 位与字节
    例如:
    • 当只有 1 个二进制位时,能表示的状态为 0 或 1 ,共 2 种状态。

    • 当有 2 个二进制位时,能表示的状态为 00011011 ,共  种状态。

    • 当有 3 个二进制位时,能表示的状态为 000001010011100101110111 ,共  种状态。

    • 位(bit,缩写为 b):是存储信息的最小单位,一个位只能存储 0 或 1 这样的二进制值。

    • 字节(Byte,缩写为 B):1B(字节) = 8b(位) ,即一个字节由 8 个二进制位组成。多个字节可以组合存储更复杂的数据。


常见数据类型的存储大小

在 C++ 语言中,不同的数据类型占用的字节数不同,具体如下:
数据类型占用字节数说明
short2B常用于存储较小范围的整数
int4B常用的整数类型,可存储一定范围内的整数
long long8B用于存储更大范围的整数
float4B单精度浮点数,用于存储小数,但精度有限
double8B双精度浮点数,相比 float 能存储更精确的小数
bool1B用于存储逻辑值,取值为 true 或 false
char1B用于存储单个字符,如字母、数字、符号等

由于 int 类型占用 4 个字节,也就是 32 位 ,其中最高位用于表示正负(0 表示正数,1 表示负数),
所以 int 类型能表示的最大值为 231-1 (因为 32 位中 1 位用于符号位,剩下 31 位全为 1 时表示最大值,同时还要包含 0 这个数值 )。


C 和 C++ 的输入输出对比

(一)C++ 的输入输出

C++ 使用 cin 和 cout 进行输入输出操作,语法简洁直观。cin 用于从标准输入设备(通常是键盘)读取数据,cout 用于向标准输出设备(通常是显示器)输出数据。
cpp
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int num;
    cin >> num; // 从键盘读取一个整数存储到 num 中
    cout << num << endl; // 输出 num 的值并换行
    return 0;
}

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b; 
    cout << a << " " << b << endl; 
    return 0;
}

(二)C 的输入输出

C 使用 scanf 和 printf 函数进行输入输出操作,scanf 用于从标准输入读取数据,printf 用于向标准输出打印数据。在使用 scanf 时,需要注意为变量传递正确的地址(使用 & 符号)。


cpp
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int num;
    scanf("%d", &num); // 从键盘读取一个整数存储到 num 中
    printf("%d\n", num); // 输出 num 的值并换行
    return 0;
}

// 多个数 
int a, b, c; 
scanf("%d %d %d", &a, &b, &c); // cin >> a >> b;
printf("%d_%d", a, b); // cout << a << "_" << b;

三、输出的格式化(C 语言风格)

在 printf 函数中,使用格式控制符来指定输出的数据类型和格式:
  • %d:用于输出 int 类型的整数。

  • %lld:用于输出 long long 类型的整数,lld 中的 l 表示长整型(long),d 表示十进制(decimal)。

  • %f:用于输出 float 类型的浮点数。

  • %lf:用于输出 double 类型的浮点数,double 也称为 long float(长浮点数),精度比 float 更高。

示例代码:
cpp
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    int int_num = 10;
    long long ll_num = 10000000000LL;
    float float_num = 3.14f;
    double double_num = 3.1415926;

    printf("%d\n", int_num);
    printf("%lld\n", ll_num);
    printf("%f\n", float_num);
    printf("%lf\n", double_num);
    return 0;
}

四、C++ 保留小数的方法

(一)方法一:使用 <iomanip> 头文件和 fixedsetprecision 操纵符

cpp
#include <iostream>
#include <iomanip>
using namespace std;
const double PI = 3.1415926;int main() {
    double r;
    cin >> r;
    double s = r * r * PI;
    cout << fixed << setprecision(2) << s << endl; // 保留两位小数输出
    return 0;
}

fixed 表示固定小数点表示法,setprecision(n) 用于设置小数部分的位数为 n

(二)方法二:使用 C 语言风格的 printf 函数

cpp
#include <cstdio>
int main() {
    double r, s, PI = 3.14;
    scanf("%lf", &r);
    s = r * r * PI;
    printf("%.2lf", s); // 保留两位小数输出
    return 0;
}

在 printf 中,%.2lf 表示输出一个 double 类型的数,并保留两位小数。


作业代码

// A.温度转换 	
#include <iostream>
#include <cstdio>
using namespace std;
int c;
double f; 
int main(){
	cin >> c;
	f = 9 / 5.0 * c + 32;
	printf("%.2lf", f);
	return 0;
}

// B. 求长方形的周长和面积
#include <iostream>
#include <cstdio>
using namespace std;
int a, b, c, d; 
int main(){
	cin >> a >> b;
	c = 2 * (a + b);
	d = a * b;
	cout << c << endl << d;
	return 0;
}

// C. 求5位数各个位数之和 
#include <iostream>
#include <cstdio>
using namespace std;
int n, g, s, b, q, w; 
int main(){
	cin >> n;
	g = n % 10, n /= 10;
	s = n % 10, n /= 10;
	b = n % 10, n /= 10;
	q = n % 10, n /= 10;
	w = n % 10, n /= 10;
	cout << g + s + b + q + w;
	return 0;
}
// D. 买文具 
#include <iostream>
#include <cstdio>
using namespace std;
int x, y, n; 
int main(){
	cin >> x >> y >> n;
	cout << n - (x + y); 
	return 0;
}


有话要说...