C语言学习(七)数据类型 整数篇

这里主要讲了C语言的基本数据类型分类、内存占用,并且主要学习了关于整数的计算机内部表达,类型选择等。

1. C语言数据类型:

① 整数
char short int long
② 浮点数
float double
③ 逻辑
bool
④ 指针
⑤ 自定义类型

2. 类型的不同

类型名称:int long double
输入输出的格式化:%d、%f、%ld、%lf
所表达的数的范围:char<short<int<folat<double
所占内存大小:1个字节到16个字节
内存中的表达形式:二进制(补码)、编码

sizeof运算符:
给出某个类型或变量在内存中所占据的字节数
sizeof(int)
sizeof(i)

例1:计算占据内存大小

int main()
{
	printf("sizeof(int)=%ld\n",sizeof(int));
	printf("sizeof(char)=%ld\n",sizeof(char));
	printf("sizeof(short)=%ld\n",sizeof(short));
	printf("sizeof(double)=%ld\n",sizeof(double));
	printf("sizeof(long)=%ld\n",sizeof(long));
	printf("sizeof(float)=%ld\n",sizeof(float));
	return 0;
}

可以得到各个数据类型所占字节如下:
在这里插入图片描述
3. 整数在计算机内部的表达

计算机内部一切都是二进制
如18-> 00010010

对于负数的表示,我们考虑0表示为00000000,1表示为00000001,要什么和1相加为0呢?我们可以知道11111111+00000001=100000000,所以-1表示为11111111.

这里就是用到了补码,11111111当做二进制为255,当做补码就是-1。
同理对于-a,其补码是2^n-a,n表示这种类型的位数。

4. 数的范围

对于一个字节(8位),可以表达的是:
00000000-11111111

其中
000000000表示0
11111111-10000000当做补码表示-1~-128
000000001-01111111当做纯二进制数表示1~127

例2:数的范围


int main()
{
	char c=255;
	//11111111
	int i=255;
	//00000000 00000000 00000000 11111111
	printf("c=%d,i=%d\n",c,i);
	return 0;
}

得到结果为:
在这里插入图片描述
对于char类型,它只有一个字节,所以11111111表示一个负数,而int类型则前面还有很多填充位为0,所以它表示一个正数。

正数范围具体情况如下:
char:1字节:-128 ~ 127
short:2字节:-32768 ~ 32767
int:取决于编译器,表示“ 1个字”
long:4字节

范围计算:-2^n ~ 2^n-1

unsigned的使用:
如果我们要表示纯二进制,而不是补码,就需要用unsigned
其作用是表达的范围少了负数部分,但其正数表达范围扩大了一倍

将代码改为:

unsigned char c=255;

得到结果为
在这里插入图片描述
5. 整数的输入输出

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

8进制与16进制
一个以0开始的数字字面是8进制
一个以0x开头的数字字面是16进制
%o用于8进制;%x用于16进制

6.整数类型的选择

如果没有特别需要,都使用int类型,今天的计算机每次读入1个字,每次计算也是1个字,所以占据内存更小的char和short也许不会更快。

unsigned与否只是在输出的时候会有不同,计算的时候也是一样的,所以没有必要的时候也就不需要使用unsigned了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言中的long double类型可以用于存储更大范围的浮点数,其输入输出方式与其他浮点数类型类似。 输入long double类型的数据可以使用scanf函数,格式化字符串为"%Lf",例如: long double num; scanf("%Lf", &num); 输出long double类型的数据可以使用printf函数,格式化字符串为"%Lf",例如: long double num = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679L; printf("num = %Lf\n", num); 注意,在输出long double类型的数据时,需要在数字后面加上字母L,表示这是一个long double类型的数据。 ### 回答2: 在C语言中,long double是一种基本的浮点数据类型,它通常被用来处理双精度浮点数。与其他浮点数据类型相比,long double的精度更高,它通常占用更多的内存空间,通常占用16个字节的存储空间。 在C语言中,我们可以使用scanf()函数来接收long double类型的输入,使用printf()函数来输出long double类型的数据。在使用scanf()函数时,我们需要使用格式说明符“%Lf”,“%Lg”或“%Le”来指示输入的数据类型为long double。同样,在使用printf()函数时,我们也需要使用相应的格式说明符来进行输出。 例如,以下是一个使用scanf()函数和printf()函数来输入和输出long double类型数据的示例: ``` #include <stdio.h> int main() { long double num1, num2, sum; printf("请输入两个long double类型的数据:"); scanf("%Lf %Lf", &num1, &num2); sum = num1 + num2; printf("输入的数据是:%.10Lf 和 %.10Lf\n", num1, num2); printf("它们的和为:%.10Lf\n", sum); return 0; } ``` 在上面的示例中,我们首先声明了三个long double类型的变量num1、num2和sum。然后,我们使用scanf()函数来接收从键盘输入的两个long double类型的数据。接着,我们将num1和num2的和赋值给sum变量。最后,我们使用printf()函数来输出输入的数据和它们的和,保留小数点后10位。 总之,在C语言中,long double数据类型可以很方便地进行输入和输出,只需要使用与其他数据类型相同的输入输出函数,并且使用相应的格式说明符。 ### 回答3: long double是C语言中的一种基本数据类型,通常用于存储需要高精度计算的数据,例如科学计算、金融计算等。在C语言中,我们可以使用scanf和printf函数来进行long double类型的输入输出。 对于输入,我们需要使用"%Lf"格式控制符,例如: long double x; scanf("%Lf", &x); 在使用scanf函数时,我们需要注意以下几点: 1. 必须使用大写字母L来表示long double类型,否则会按照double类型进行解析。 2. 如果输入的数据比long double类型的范围还大,程序会产生溢出错误。 3. 在输入long double类型的数据时,我们需要注意输入的数据的精度,过高或者过低的精度可能会导致精度误差。 对于输出,我们同样需要使用"%Lf"格式控制符,例如: long double x = 3.1415926535; printf("%.10Lf\n", x); 在使用printf函数时,我们需要注意以下几点: 1. 必须使用大写字母L来表示long double类型,否则会按照double类型进行输出。 2. 在输出long double类型的数据时,我们需要注意输出的精度,过高或者过低的精度可能会导致精度误差。 总结: C语言中long double类型的输入输出非常类似于double类型的输入输出,我们只需要在格式控制符中加上大小写字母L即可。需要注意的是,long double类型的精度非常高,我们在使用时需要小心。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值