1613551 发表于 2022-3-10 19:53:46

为啥小甲鱼的课后作业都是上课没讲的

unsigned long long sum = 0;
unsigned long long temp;
unsigned long long weight;
这些完全都看不懂啊



ba21 发表于 2022-3-10 20:24:26

64位无符整型
unsigned long long 取值范围:0~18446744073709551615

小甲鱼 发表于 2022-3-10 21:54:28

在第 6 讲数据类型中,整一节课都在讲这个,为什么说没讲过呢?

我重新翻看一下视频,下面内容是视频中涉及到该知识点的讲解:

我们可以为这些基本数据类型加上一些限定符,比如表示长度的 short 和 long。

比如 int 经过限定符修饰之后,可以是 short int,long int,还可以是 long long int,其中的 long long int 是 C99 新增加的。

这里需要说的是,这里 C 语言并没有限制 int 的坑具体要挖多大,short int 或l ong int 的坑又要挖多大。标准只是要求:short int <= int <= long int <= long long int。

这样约定的好处就是使得 C 语言可以永垂不朽,这么说其实一点都不夸张。

我们现在的 CPU 是 64 位为主流,也可以预测到不久的将来会推出 128 位甚至 256 位的 CPU。

但是在 C 语言刚刚发明的时候,那时候 CPU 还是 8 位和 16 位为主。如果那时候就将整型写死为 8 位或 16 位,那么肯定现在我们就不会来学习 C 语言了。

虽然你现在还不了解 8 位和 64 位对于一个程序来说意味着什么,但光听这数字的差距,都觉得 8 为很 LOW 了,对不对?!

那既然没有规定一个坑要挖多大,那我怎么知道这个坑到底有多大?C 语言为此提供了一个特殊的运算符:sizeof 运算符。

#include <stdio.h>

int main()
{
      printf("int = %d\n", sizeof(int));
      printf("short int = %d\n", sizeof(short));
      printf("long int = %d\n", sizeof(long));
      printf("long long int = %d\n", sizeof(long long));
      printf("char = %d\n", sizeof(char));
      printf("_Bool = %d\n", sizeof(_Bool));
      printf("float = %d\n", sizeof(float));
      printf("double = %d\n", sizeof(double));
      printf("long double = %d\n", sizeof(long double));

      return 0;
}

$ gcc test2.c && ./a.out
int = 4
short int = 2
long int = 4
long long int = 8
char = 1
_Bool = 1
float = 4
double = 8
long double = 12

还有一对类型限定符是 signed 和 unsigned,它们用于限定 char 类型和任何整型变量的取值范围。

signed 表示该变量是带符号位的,而 unsigned 表示该变量是不带符号位的。

带符号位的变量可以表示负数,而不带符号位的变量只能表示正数,它的存储空间也就相应扩大一倍。

默认所有的整型变量都是 signed 的,也就是带符号位的。

因此加上 signed 和 unsigned 限定符,四种整型就变成了八种:


[*] short
[*]unsigned short
[*] int
[*]unsigned int
[*] long
[*]unsigned long
[*] long long
[*]unsigned long long



1613551 发表于 2022-3-11 17:42:31

小甲鱼 发表于 2022-3-10 21:54
在第 6 讲数据类型中,整一节课都在讲这个,为什么说没讲过呢?

我重新翻看一下视频,下面内容是视频中 ...

哇,我是真的没有想到小甲鱼本人居然亲自回我了,可是我还是不是很懂,关于short还有long、long long这些限定符我在课上是有做笔记的,还有关于signed和unsigned限定符这个我也是知道的,因为课上确实讲了,我不懂的是,比如unsigned long long sum = 0;这个一整天连起来是什么意思,不是很懂sum是什么意思,还有什么for(i=0; i<64 ,i ++)这些,因为我确实是纯萌新,甚至电脑都没怎么用,课后作业除了这最后一题其他的都完美做出来了,我也是刚学完第六课,数据类型

1613551 发表于 2022-3-12 20:09:05

小甲鱼 发表于 2022-3-10 21:54
在第 6 讲数据类型中,整一节课都在讲这个,为什么说没讲过呢?

我重新翻看一下视频,下面内容是视频中 ...

我今天又回去看了一遍,现在除了for(i=0; i<64 ,i ++)这个看不懂以外,其他都看懂啦

小甲鱼 发表于 2022-3-13 04:38:53

1613551 发表于 2022-3-11 17:42
哇,我是真的没有想到小甲鱼本人居然亲自回我了,可是我还是不是很懂,关于short还有long、long long这些 ...

是这样的,类似于 int sum = 0; int 是挖个 int 尺寸的坑,sum 是变量名,也就是这个坑的名字,sum = 0 就是将 0 这个数字扔到坑里面。

那么同样的道理呀,unsigned long long sum = 0; 就是挖了一个 unsigned long long 尺寸的坑……

for(i=0; i < 64; i++) 在后面讲解循环的时候才会讲到,这个并不是题目的考核点呀,因为还没有讲过,所以这道题才以挖空填空的方式出题。

解题的方式就是:根据提示,用所学的知识去填空,推理得到正确的答案。

换个角度考虑,你是出题者,截至第六讲就教了一个打印语句和几个类型,如果想要出难题又不超纲,你会怎么做才使得题目有意思?让大家做起来更有成就感?


1613551 发表于 2022-3-13 16:16:27

小甲鱼 发表于 2022-3-13 04:38
是这样的,类似于 int sum = 0; int 是挖个 int 尺寸的坑,sum 是变量名,也就是这个坑的名字,sum = 0...

对不起,是我冤枉你了,我题目没有看完,我只看了题目,没有看到后面提供的大部分代码

1613551 发表于 2022-3-13 16:22:50

小甲鱼 发表于 2022-3-13 04:38
是这样的,类似于 int sum = 0; int 是挖个 int 尺寸的坑,sum 是变量名,也就是这个坑的名字,sum = 0...

ó﹏ò已经这么多人看了,他们不会质疑小甲鱼吧

hornwong 发表于 2022-3-13 19:52:41

1613551 发表于 2022-4-3 17:20:59

小甲鱼 发表于 2022-3-13 04:38
是这样的,类似于 int sum = 0; int 是挖个 int 尺寸的坑,sum 是变量名,也就是这个坑的名字,sum = 0...

呜呜呜,小甲鱼为啥我发不了帖子了,我连续发了三个都给吞了,因为我问题太多,然后还特别低级吗
页: [1]
查看完整版本: 为啥小甲鱼的课后作业都是上课没讲的