[Powered by Google Translate] [静态电子声音] ROB:好了,我们只是把你带到了CS50空间。 ALI:等一下,等一下回来了。 第欢迎您! 罗伯:第! ALI:耶! 罗伯:Supersection! ALI:我是阿里,这是Rob。 好了,现在我们将解释空间。 罗伯:所以我们只是把你带到了CS50空间。 您将使用这个有很多这学期在你的小节。 基本上,我们已经收到了你下载的电器。 你能想到的CS50空间作为一个网络接口的电器交谈 我们有一些服务器上的某个地方。 所以,你可以在此界面中运行你的代码,我们将 请参阅如何做的事情。 您也可以看看其他人的代码一节中, - ALI:有些人已经找到了,你可以聊天的人就在身边。 我们将看到它,太,所以这是令人兴奋的。 来吧,来坐。 一个座位。 罗伯:所以,部分是 - ALI:不,不,你们能来。 罗伯:节将是互动性更强学期。 ALI:哦,他像 - 哦。 好了,爽。 所以,如果你们是刚进来的,你可以去这个网站,如果我能得到 在那里,就在那里。 我们不能真正把它写,因为没有电路板空间,但此链接 在这里,您的计算机上,你就会进入CS50 空间,这是一件很酷的事情。 好吧。 你有问题吗? 罗伯:所以,你可以发现存在的问题 - 我们需要的是能够写这个地方。 因此,如果,你去cs50.net/psets和这是黑客supersection - 你进入黑客版的pset 1,看规范 某处页 - ALI:所以基本上,而Rob的期待,我们会做的 节今天有一节的问题 - 罗伯: - 8页。 ALI: - 部分问题 - 罗伯:节的问题。 ALI:对不起,部分问题。 而这些是我们要去走了过来 - 这些都是我们要今天去第。 而我们将它的代码CS50空间,并希望这将工作。 我们就可以通过他们的谈话。 你们可以问问题时,你的感觉 - 罗伯:所以这越来越成为一个平常的事,最pset的。 我想用这一个,它说你不必须把这些问题中。 但这样的想法是,这些问题在pset,你可以来 部分有这些问题的回答。 或者,如果你不来部分,你可以回答这些问题在您自己或得到 帮助在办公时间或东西。 但这些问题,都应该准备你的问题集。 对黑客版,有很多的问题可能只是约 扩展您当前的CS知识。 ALI:是的,漂亮多了。 好了,所以,每个人都在CS50空间? 嗨,进来。 主讲人1:我们能看到的URL一次吗? 罗布:是的,这将是更容易,一旦你实际上是在你的小节,和 您的TF可以提前向您发送电子邮件的URL。 ALI:耶,坐一坐。 这里有座位。 前面是没有那么糟糕。 什么? 因此,CS50空间,我们到达那里。 有没有人有任何问题之前,我们进入 - 什么? 罗伯:还有的甚至没有任何粉笔。 [听不清] ALI:对不起。 你可以使用你的指甲吗? 我们正处在一个非常高科技的类的一个技术含量非常低的空间。 好了,大家好样的吗? 有没有人有问题吗? 正如我以前说过,我们要通过部分的问题 在pset规格。 因此,只是一对夫妇的问题,我们要 代码CS50空间。 大家好? 好吧。 好? 罗伯:你有一台笔记本电脑吗? ALI:你可以跟卢卡斯。 他坐在你旁边。 粘结时间。 罗伯:所以,开始的第一个问题吗? ALI:是的。 我们可以开始了。 你要我 - 我可以走了。 因此,我们将在pset规格。 哦,为什么它 - ROB:控制。 ALI:好了,我们要回答这些事情呢? 罗伯:哦,是的。 所以 - ALI:哦,所有人都在看Rob的主演短裤? 好了,爽。 罗伯:是啊,我不认为我们一定希望你能有 在本节之前,看着它,但我们可以讨论这些 问题预先,因为它们是根据部分的问题的东西。 所以,如果你没有看过它,不要担心。 这些谁可以尝试回答的问题。 所以,第一个问题,什么是预处理器,请问# 有关呢? 因此,没有人回答这个吗? ALI:你们可以谈论它。 当然,请便。 主讲人2:#包括一些预先写好的代码,而不是 将其复制并粘贴在你的程序中,只是说包括IT, 预处理器知道它的存在,它应该把它添加在 以后或之前任何事情发生。 ALI:是啊,真棒。 酷。 罗伯:所以,当你实际上是在预处理器编译程序,这是 第一步骤。 发生在四大步骤编译。 因此,预处理器是第一大的,它是这家伙“ 通过和看起来所有这些hash符号。 用哈希开头的任何行,预处理器看着它,并认为 如果它可以处理它。 所以#包括告诉的预处理器寻找一些cs50.h的的 文件,只是其内容复制并粘贴到该文件中。 所以,你可以真正的#include任何你想要的,但它的大部分将是 h文件。 我们还没有定义,所以这并不重要。 ALI:是的,我们是很好的,一个。 有没有人有任何问题吗? 我们好? 下一个问题。 主讲人3:在短期内,有一些关于的呢? 那是有关的,或者是不相关的? 罗伯:关于预处理器的吗? 主讲人3:是啊,还是我做的东西了吗? 罗伯:因此,短期内可能会表现出处理这个文件, 将其输出到另一个。c文件,所以你可以预先处理此文件 - 当你运行像,使“你好”或“铛hello.c的,你正在做的一切 编译的一大步。 但你可以明确到其独立的步骤。 因此,首先你可以预先处理。 然后你就可以编译,那么你就可以组装,然后你就可以连接。 我们会得到那些其他的。 但前处理,你种的前处理它,然后它进入 另一个C文件。 由于前处理并没有真正改变什么。 它只是一堆的复制和粘贴。 您可以手动复制并粘贴自己。 ALI是明确的。c文件是一个C文件,所以它的 C代码编写的。 因此,它会从C代码为C代码。 你只需添加更多的代码英镑。 罗伯:当你预先处理它,它仍然是一个有效的C文件。 主讲人3:好。 ALI:好问题。 我喜欢这样。 好,下一个问题。 什么是编译器? 任何人? 是。 扬声器4:它改变了处理前的代码组件。 ALI:完美的。 罗伯:是的。 ALI:酷。 罗伯:所以,这就是编译器做专 在我们使用的铿锵。 编译器是一个非常普遍的意义上说,就像在一个语言代码 并把它变成另一种语言。 因此,在C - ,以及铛正在代码,在C和将其转化为装配。 你不能够了解大会。 但是,这是它的语言,把它变成。 ALI:好吧。 那么,什么是汇编器? 任何人? SPEAKER 5:[听不清]二进制? ALI:对不起,是什么? SPEAKER 5:[听不清]二进制? 罗伯:是的。 ALI:是的。 罗伯:所以汇编 - 汇编代码是真的,真的关闭你的计算机可以理解的, 但请记住,它不完全理解的文字 这是汇编代码。 您需要将其转换成直线1s和0s。 这就像一个直接翻译过程中。 我们只能给你一个表的映射每个 汇编指令的意思。 但汇编只是这样做的翻译。 它的汇编代码转换成1和0。 ALI的最后一个,那么,什么是连接器? 又如何不-lcs50有关吗? 任何人? 罗伯:这是最难的和最不解释在编译器中的视频。 ALI:有没有人记得看到lcs50在命令吗? 扬声器(6):当你去作。 ALI:这是在做。 是啊,凉,还好。 是否有任何猜测或含糊的 - 是的,去。 SPEAKER:我不知道,因为你的短是真的[听不清],但它 做单独的文件中,每一个库,然后把东西 他们都聚集在一个库? 罗伯:是的。 所以当你有hello.c的,它是一个非常简单的程序。 你真的只能做一件事。 但是,当你进入其他程序 - 我想,即使你的GetString在你的程序中,你需要开始 包括其他文件。 所以CS50图书馆就是这样的一个文件,在其中我们有实现 的GetString和调用getInt和所有这些事情。 因此,链接器是通过所有这些“四处寻找 看到函数的定义,并确保当我打电话的文件, GetString的某个地方,它都知道,GetString的,也就是说,它的 GetString的过度在CS50库。 因此,连接器只需要所有这些文件,捣毁在一起,和现在 你有一个可执行文件。 所以记住,如果你正在使用的的CS50库,你既需要 #包括在顶部,然后在make命令,因为你 说,你有lcs50。 所以,你不能只是有一个。 所以,这只是记住,以备将来参考。 SPEAKER 8:那么,让我们说有另一个库,像cs51.h,我们会 也有添加​​lcs51? 罗伯:这lcs50完美的作品的唯一原因是因为我们有组 在你的设备中的特定位置,以便它知道什么 - lcs50手段。 我们只能给你一个cs50.c的文件,然后你可以编译它,说: Clang的的hello.c的cs50.c,然后把它会让你的可执行 这两个文件。 它知道,以上的一些我们指定的目录中-lcs50意味着cs50.c 你的设备。 因此,如果,你想cs51.c是可指定只说lcs51, 然后我们也需要把它在该目录中,所以它知道在哪里 寻找它。 ALI:你的问题是什么? SPEAKER 7:为什么你要链接的CS50 如果 - 上星期出去了吗,复制/粘贴的第一步,当你处理它呢? ALI:你想利用它吗? ROB:当然可以。 所以在cs50.h的文件是分开的cs50.c C文件。 你有没有得到到函数原型类? 好吧。 所以基本上,cs50.h的文件仅仅是复制和粘贴 - ALI:你们知道签名是什么? 好吧,这么漂亮多了,如果你看 - 罗伯:让我们假装cs50.h是不存在的。 现在,这个文件 - 你正在做的字符串s = GetString的。 但是,当我们在代码中,这一点已经得到了不知道是什么 GetString的。 它知道它是一个函数,因为你调用它。 但它不知道,它实际上应该返回一个字符串。 所以,就像我说的,字符串s =调用getInt,这不作出任何意义,因为 你签署一个整数为字符串。 但它不知道的GetString有一定道理的,因为它不 知道的GetString返回一个字符串。 所以cs50.h说的是这样的事情。 ALI:那么罗布输入的是,这是一个承诺的方式,这是怎么回事 有这样的函数调用GetString的。 罗伯:这是所有cs50.h的复制和粘贴在这里, 调用getInt,所有这些事情。 而这只是说的GetString返回一个字符串。 你不知道它是如何实现的,但是,当我们这一行,现在 它知道,它正确地返回一个字符串。 SPEAKER:所以,如果我们没有刻意用#include 的事情,而不是 刚写的原型,我们实际上是为那些要使​​用? 罗伯:是的。 因此,让我们运行这个。 SPEAKER:是吗? 因此,默认情况下,它会做的-l CS50仅仅是因为 - 。 罗伯: - 表达。 ALI:是的,因为像你说的,它在生成文件。 ROB:cs50.h也正好是的typedef char *到字符串​​。 您可以完全忽略这意味着什么现在。 但是,这也包括在cs50.h. 所以,现在事情的来龙去脉完美的罚款。 它运行完全一样的,因为它是当我们刚 的#include。 因此,包括cs50.h发生过 - 包括你需要的东西 - 一样,你不使用getInt这个计划,但不要紧。 它会忽略它。 ALI:那么当你做lcs50在这里,在这里,什么是怎么回事 的是,它具有实际可执行的代码。 所以这就是它实际上是这样做的 - 编写代码为getString。 因此,它不只是一个承诺了。 它实际上是经历的字符串和所有的东西。 有意义吗? 有问题吗?好的。 “酷豆”。 罗伯:现在,我们就可以进入实际的代码。 ALI:好吧。 因此,这里是第一个问题。 所以说,写一个程序,提示用户输入一个小写 将其转换为大写字母,然后不使用位 操作,如下面的示例输出。 所以你可以看到,运行。/ a.out格式的程序,然后你 打算把小写的a,那么你的程序应该给资本 那么,为什么不你们给它一出手就CS50空间? 所以你们都可以去这里。 在这里,您可以删除所有的代码。 然后你就可以继续前进,并开始编码的东西。 罗伯:你可能会想使用getchar,这是 列入在CS50图书馆。 ALI:我想它可能是更好的,如果你保存的顶部。 所以,你可能要改变的东西在中间。 来吧,工作。 随意与对方。 罗伯:你可以提出问题,如果你有 - SPEAKER 10:什么是位运算? 罗伯:所以,忽略这个问题。 ALI:如果你不知道吧,这是很好的。 罗伯:我们将使用它的下一个问题。 但是,如果你不知道什么是位运算符,这很好。 SPEAKER 10:是,像把它转换为ASCII代码? ALI:不可以。 罗伯:不可以。 对于这个问题,你可以做到这一点。 扬声器10:你是如何做到这一点? 因此,如果我有地方写 - ALI:写的东西。 罗伯:我只是到这种类型。 ALI:在上面的类型。 罗伯:哦,我坐在一个麦克风。 所以,在课堂上,我们看到了资本的ASCII值是65。 资本B是66,等等。 所以,你简直可以用'A',指的是65号。 喜欢,这是值65。 我可以做一些事情,如int x = 100 - 'A'。现在x的值将 100 - 65。 ALI:可以运行,并显示。 哦,也许不是。 没关系。 罗伯:我不得不进行打印。 SPEAKER 10:你如何把它转换回字符? ALI:所以,如果你不知道不知道 - 你只是迫使它是char一个平等的。 罗伯:于是就有了 - 一个字符和一个整数之间的区别仅仅是在规模上。 因此,一个整数恰好是能代表的东西 一样,四十亿。 char是唯一能代表多达255个。 但是,在它们之间没有任何区别以外。 所以,你可以说字符c = 65。 这相当于说字符c ='A'。 ALI:哦,不。 实际上它并不保存的东西。 罗伯:不,你不能这样做。 ALI:这只是 - [呻吟] ROB:好了,阿里只写了一个程序,它先打印100 - 如我们预期,因为100减去ASCII'A',这是作为一个整数35, A的值是65。 然后,她打印出来使用%C,这意味着它解释为一个字符。 因此,100 - a是35。 解释,作为一个字符恰好是哈希符号。 如果你看一下,你会看到在asciitable.com或任何,35 哈希符号。 ALI:好的,任何其他说明什么问题呢? 好吧,你们可以去前进,然后做到这一点。 随意提问,或互相交谈。 或者,如果你已经完成了,你可以放松。 卢卡斯:他们是同一类的,所有的小写字母顺序和 还大写字母也是为了,因为这是一些有用的东西 问题。 ALI:好点,卢卡斯。 所以,你们都明白了吗? 扬声器11:是的。 这是你如何做到这一点,对不对? ALI:是的。 罗伯:是的。 SPEAKER 11:[听不清] ALI:所有权利。 ROB的问题是什么要求吗? 只是转换 - ALI:转换到大写小写。 就是这样。 罗伯:好吧。 ALI:我们应该写什么呢? 我想我们只是看别人的。 罗伯:因此,对于那些谁可能被卡住了,一个方法 - 如果我有一些字符c,让我们说这恰好是信D. 所以现在我找出字母的字母C的是什么? D,但我的意思是,D恰好是第四个字母的字母表。 如果我们从0开始计数,那么它的第三个字母。 因此,如果A是0,B为1,C 2,D 3,我可以找出整数位置 - 的字母C的什么位置? 没有任何人有任何想法吗? ALI:我认为他们所有的编码。 ROB:关于第一个? SPEAKER 12:所以,无论是减去的第一个? 罗伯:是的。 ALI:是啊,真棒。 所以,你可以做资本ð - 哦,对不起。 您需要的字符,你减去第一位的,如你所说。 罗伯:所以,如果D是像68,我们减去A,这是65,那么我们得到 3,告诉我们,D是第三个字母 从0开始。 所以,你可以使用它。 现在我们知道了什么​​字母,在 大写字母,或 - 要弄清楚什么,我们可以做同样的事情为小写字母 小写的位置,我们就能加入 我们可以用它来然后再转换为大写使用 非常类似的想法。 请建议? ALI:你家伙 - 等待,我不知道你们是多远。 是你做的,你还在工作,你坚持了吗? 你们可以喊出来 - 卡住了。 一个人被卡住了。 酷。 我倾向于被卡住了。 扬声器13:我所做的一切。 ALI:你做了什么? 好吧。 完成。 SPEAKER 13:[听不清] ALI:是的,凉凉的。 你检查,它在小写形式? 好了,爽。 其他人在哪里? 这提示帮助你,为联合国坚持自己吗? 扬声器14:不完全是,只是因为,我不知道,我不 消化它。 ALI:好了,爽。 你想尝试 - 或者你想要去和他谈话吗? 罗伯:我要说的是 - 因此,使用这一点。 你明白我们是如何走到什么位置的字母 信是什么? 扬声器14:好了,所以,当你把东西在单引号, 返回一个数字吗? 罗伯:是的。 将被转换为ASCII值,它代表。 所以你想要去ASCII表或不管它是什么? ALI:只是其中之一? 罗伯:是的。 所以,当你把这些符号,忽略了很多 - ALI:[听不清] 罗伯:哦,使用光标。 ALI:是的。 这是令人兴奋的。 罗伯:那么,在左侧,这是特殊的符号,忽略了这些 - 如果你把这些符号在单引号,那么这将是 翻译成该值在左边。 ALI:这是它的十进制数。 这是65至66,B与A比赛一样,你会发现,他们都在 按字母顺序排列,这使得差异。 因此,作为罗布说,在此之前,在该代码中,我们计算的距离 的第一个字母本身。 那会是相同的,无论是大写或小写。 罗伯:所以当我们做了A,65 D,68减去,我们可以得到3。 因为D是成拼音的三个位置。 ALI:那么你会怎么翻译过来找小D吗? 罗伯:是的。 所以,如果我现在有3个,我知道我想要去的三个字母 - 我们碰巧是小写的,但现在让我们说我想要去三 位置进入小写方面的事情。 那么,如何才能做到这一点呢? 我知道小写字母a为97。 所以,我如何找到三个位置成小写字母? SPEAKER 15:我有一个问题,其实。 ALI:是的,继续前进。 扬声器15:因此,对于这一点,它并不真正的问题,如果我知道这个位置, 喜欢,我不需要这个表。 罗伯:不。 你将永远不会使用这些数字。 在你的程序中,这是一个很重要的一点,你不应该硬 编写任何这些常量。 使用'A'。从来没有使用65或97。 ALI:那些被称为神奇的数字,他们真的很混乱。 一样,当你调试的代码,你可能不记得是什么 你用他们的。 和我们品位为你的代码,我们将无法真正了解什么 您使用的是他们。 因此,它是更好,如果你实际使用的字符,所以它使 更有意义的人。 好了,其他问题吗? 有更多的人做,或 - 我想我们可以检查。 这真是让人毛骨悚然,你可以看到别人的代码。 罗伯:是的。 我们没有在这里做到这一点。 我们不知道别人的名字。 ALI:噢,这使得它更好的,所以我们会更公正 而不是随便挑选的人。 不要担心。 我不会做。 如果你有随机的东西 - 没关系。 好吧。 人们如何做呢? SPEAKER 17:第九行应打印出的字符? 罗伯:是的。 ALI:是的。 所以,如果你去了 - 罗伯:哦,不能这样做。 ALI:你会看到,它打印的哈希符号。 扬声器17:哦,好吧。 罗伯:我猜你可以看看事情的另一种方式是,我们要打印 字符。 第一个我们要打印的字母A。 下一个我们要打印的是只有65。 这些,它可能会骂我。 因此,如果我们只是运行它,你会发现,它打印一个两次。 因为我们要求的是同样的事情。 我们要求它打印的字母A,然后,我们要求它打印 65号解释为一个字符,这是同样的事情。 ALI:你有什么话要说吗? 呵呵,开玩笑的,对不起。 所有的权利,是人 - 罗伯:我们可以直接穿过它。 ALI:好吧,那么如何启动? 任何人? 作为一个提示,我们要得到的东西的人,从typers。 SPEAKER 18:[听不清] ALI:哦,是的,一个提示,完美。 因此,我们将类型 - 我们输入的是什么? 任何人? 或者我应该只是类型呢? 我们实际输入的 - ROB:当然可以。 ALI:因此,我们将键入一个printf提示,所以我们可以 喜欢,给我一个字符。 好了,然后呢? 为什么这样做呢? 罗伯:我不知道。 ALI:好吧。 所以现在,我们要告诉他们,给了我们一个字符。 但如何你真正得到字符吗? 扬声器19:使用GetString。 ALI:GetString的? GETCHAR? 好了,这样一个字符串和一个字符之间的区别是什么? 扬声器19:字符串是一个系列的,像一个字符数组。 ALI:冷啊。 因此,在这个问题上,我们只需要考虑一个字符的时间,所以 我们唯一要做的getchar函数,例如。 罗伯:我们可以实现一个功能,如果我们想要把整个字符串 对字符串和所有字母小写转换为大写,所有 大写转换为小写。 但在这里,我们只是问你一个字符。 ALI:所以,现在我们这里的字符,那么我们就需要将它保存。 那么,我们将添加字符c - 什么? 扬声器20:定义的变量。 ALI:是的,没错。 因此,我们有我们的品格。 Rob:我想你可能是 - 你只有三个空间,这就是为什么它的吼你。 ALI:好吧,冷静,现在我们已经按Tab键集,会发生什么呢? 什么是下一步? 罗伯:我们的程序应该做的是改变一个小写字母的 大写字母。 如果我碰巧进来的哈希符号? 是 - ALI:这是一个很好的象征。 我们使用了很多。 罗伯:这是一个有效的事情,我可以转换为大写形式吗? 扬声器21号 ALI:不可以。 我们应该检查一下。 因此,我们可以有一个if语句检查,因此,如果C是大于 或等于小写字母的“A” - 因此,如果我们看图表,你会发现,它已经成为之间在这里, 于97,和小写字母a。 ,它可以是任何这些,和增量的所有的方式,。 再有就是Z在122。 ,它具有介于这两个值。 这是否有意义吗? 罗伯:所以,如果c是在97 122 - 或者你不应该需要使用这些数字 - 如果c不在'a'和 “Z”,那么它​​是不是一个有效的字符,我们为大写。 ALI:所以在代码的形式,我们说,如果c是大于或等于单 案例小写 - 哇,你怎么说? 好,大于或等于小写字母'a'的,并且它必须是上述 小写的“Z。因此,它必须是小于或等于为小写字母'z'的。 我们相信这是两者之间的。 然后,我们就可以继续我们的幸福代码。 什么? 罗伯:所以我想,我们只是不断地问,如果我们碰巧没有 小写字母。 ALI:哦,我没有意识到这一点。 抱歉。 好了,所以如果我们要作为罗布说,并确保 - 我们可以问他们,那么我们应该怎么办呢? 扬声器22:[听不清] 罗伯:是的。 我们应该用某种循环。 因为用户可以输入一些无效无数次的。 所以,你可以使用一个while循环。 一个do-whil​​e循环的目的 - 从字面上看,你的一生中唯一的一次,你永远不会做的 while循环是当你要求用户输入。 因此,事实上,我们在这里要求用户输入一个提示,我们应该 使用do-whil​​e循环。 这是为什么? 由于do-whil​​e循环总是会发生至少一次。 因此,当你要求用户输入,你想这样的事情发生至少一次。 然后,如果事情是成功的,你可以继续下去。 如果没有,回去再问。 ALI:所以换句话说,我们需要做的部分。 所以这是告诉它做什么。 因此我们知道printf - 打印的声明,提示,也获得字符,或试图 得到一个字符。 然后,我们必须检查它是否确实是正确的。 于是我们添加的条件,那么我们说一会儿,然后我们有 条件语句。 罗伯:但是,现在我们已经扭转了思路。 现在,我们最初是说,如果c是在这个范围内,它是有效的。 现在,我们要扭转这一趋势,并说,如果c是不在此范围内,那么我们 需要备份做的事情了。 ALI:哦,是的。 罗伯:所以,虽然这是不正确的,我们要回去 问另一个字符。 是否每个人都看到了吗? 在此问题? 好吧。 所以,现在我们有一个有效的字符,我们可以大写。 ALI:那么下一步是什么为大写? SPEAKER 23:32。 ALI:添加 - 对不起,是什么? 扬声器23:你不能只加32? 罗伯:所以,是的,不可思议的数字。 您应该只使用单引号的东西。 扬声器23:好了,好了 - 罗布:但是,你可以得到32 - ALI:你是怎么得到的32号,我想,是我们在说什么。 扬声器23:[听不清] 罗伯:所以,我们可以得出与32号在一起 - 扬声器23:[听不清]? 罗伯:是的。 但是,如果我们在这两个步骤中要做到这一点,我们以前与 位置的东西。 因此,在字母表中的位置的c恰好是是c减去小写 '一'。因此,如果我们进入了一个小写字母“D”,位置为3。 现在,我们要取东西大写的一系列的事情。 所以,现在我们新的c将是资本'A'加位置。 所以人们看到如何给我们带来了 - 我们正在小写的范围内,我们的确切深度 范围内,下降到大写的范围,并去那么远 再次,这是将要在相同的字符,但现在 大写。 ALI:被搞糊涂了怎么样的人,他只是说32, 基本上,他结合这两个合并为一个语句。 所以写这封信,说你可以只是一种等效的方式, 的C减“,”和替代的位置,把它放到这里。 所以,他做了什么,我不知道不知道 - 字符NEWC大写字母'A'加C减小写字母“A”。因为代数, 你可以移动它们。 你也可以说,你可以移动它,所以字符NEWC =大写字母'A' 减去小写字母'A'加C。 而这一点,你会发现,如果我们回到图表。 我们有大写字母A是65,小写字母a为97。 65 - 97 -32。 你好。 一个座位。 哦。 你可以坐在这里。 酷,好了,真棒。 欢迎到部分。 你会发现,不同的是32。 所以这就是他得到了这个数字。 但它不是作为罗布说,最好的办法做到这一点,因为它有怪异的 神奇的数字混乱。 罗伯:你应该使用大写小写的a减号。 你不应该只使用直32。 扬声器24:这是为什么呢? 为什么你不应该使用32? ALI:如果我们做到了,这将是char NEWC = -32 + C。 而如果你没有看到它的其余部分,如果这一切都消失了,和你 只看到这一行,那么你怎么知道什么是负32? 这是刚出来的地方。 罗伯:所以你的程序将工作完全没问题。 这只是一种风格的东西。 有人去阅读你的代码,他们喜欢什么32的意思吗? 也许他们不知道不知道 - 我可能不会立刻意识到,32正好是 一个小写字母和一个大写字母的区别,虽然 我们将在接下来的问题中使用这一事实。 32 - 上面说32,你可以发表评论之间的区别是 'A'和'。'但是,在这一点上,为什么不只是使用'A'和'A',和你 不需要评论。 ALI:这只是它上面有很多的方式清洁,风格明智的。 所以,因为你刚开始编程 - 我想不会,因为你是黑客EDI(电子数据交换) - 没关系。 这只是有一个好办法 - 这是更好,有更好的风格。 这是其他人更容易阅读。 罗伯:你不应该需要记住的ASCII表,直到永远。 您应该只能够使用单引号。 有问题吗? ALI:每个人都很好吗? 罗伯:好吧。 因此,接下来的问题是巨大的。 因此,下一个问题问我们 - ALI:下一个问题是要求我们做同样的事情,但使用 按位运算符。 罗伯:当然,我们也没有看到按位运算符。 所以,现在我们将讨论这些。 ALI:兴奋。 他们是超级好玩的。 罗伯:所以,的定期运营商,如X加Y,减,时间,鸿沟。 ALI:此提示中键入它。 罗布:还有%,如果你还没有看到它,你可以使用 百分比符号。 但我们不会使用这个问题。 我们要使用按位运算符。 现在还记得,我们把它在课堂上1。 我不知道,如果我们已经讨论了二进制超出了。 但请记住,每一个数字表示 - 好了,一切 - 上表示它的二进制的1s和0s。 因此,这意味着,当我说8号,我碰巧知道, 等,1000。 什么位运算符,让我们做的就是这些位 - 这些位直接。 现在,我不再在八个方面。 我在1000,和我想要做的事情与 单个位。 因此,阿里已经写了按位运算符在这里,但that's - 8号,我们将使用我们的例子中的数字。 的二进制表示为1000。 我们将使用另一个号码,5 - 其实让我们用9和5。 5的二进制形式为00 - 0101。 ALI:大家好? 二进制的东西是什么? 这是从第一堂课吗? 罗伯:所以,即使你是不完全的顶部如何转换的事情 二进制,这是重要的,这个问题不完全。 我们将使用它,但你必须有更多的机会,以找出如何 迅速转成二进制的东西。 因此,使用9和5,现在我们有我们的按位运算符。 哦,还有,9和5,如果它是一个整数,那么实际上它是32位的, 这意味着我们必须像0,0,0,0了很多次,然后 101的最末尾。 这是因为,无论你做什么,整数,32位。 只是因为我们只需要4位代表9,并不意味着我们不 使用了其他27位只是0。 ALI:只是为了澄清,这些数字,这是一个0或1位。 这一个是4位。 作为罗布说,机器将它们存储在32。 那么,他们将有32个为0或1。 酷吧? 罗伯:按位运算符。 第一个,我们会处理的,让我们做。 因此,如果我们做的9 5。 那么什么和做的是,点点滴滴,比较这两个数字位 如果这两个数字是1,那么它将返回一个1。 如果一个是0,另一个是1,或两者都为0,那么它返回0。 所以,你可以把它看成你的逻辑“与”。 和你一样需要真正的和真实的返回true,但真正的,假的就是假的。 因此,它是同样的事情,但现在我们正在处理的只是位。 ALI:所以,如果你看看这个,你就会有1 - 你会排队,因此这将是1和0。 你们是否认为这是 - 那又是什么评价? 扬声器25:1。 ALI:酷。 “或”否“。 抱歉。 那么,这是有道理的吗? 那么,什么是集体的答案了吗? 抱歉。 因此,如果我们有1和0,那么什么你? 罗伯:那么,你认为你怎么说出声来。 如果您有两个位,x和y,你需要x和y为1,以便它 以评估为true - 或者,为了它来评估为1。 如果x或y为0,则它​​的值为false或0。 卢卡斯:这是很好的记住,是真实的,0是错误的。 所以,如果你有真正的,假的,这是假的。 但是,真正的,真实的,真实的。 假,假,假的。 ALI:我们有真正的,假的。 因此,1和0。 所以还是那句话,对不起,更多的时间? 扬声器25:这将是0。 是啊,爽。 然后我们有0和1 - 扬声器25:[听不清] ALI:是的。 所以,你可以随时更换他们 - 然后,如果你有0和0? 扬声器4:1? 0? 罗伯:所以它是0。 这并不是说这两个数字是相同的。 这两个数字需要1。 ALI:因此,无论是真实的,它是真实的。 所以这是0。 然后你有1%1,这是? 罗伯:这是相当不错的数字。 他们有一切可能的 - ALI:干得好,令人叫绝。 好了,爽。 那么,给大家的感觉? 罗伯:所以,现在我们要做的。 这将是非常相似的,但现在不是x和y的需要 为了评估一个是1,现在是x或 Ŷ需要为1。 ALI:1 | 0计算 - 类:1。 ALI:酷。 0 | 1的计算结果为 - 类:1。 ALI:冷,然后再按0 | 0 - CLASS:0。 ALI:是啊,然后1 | 1 - 类:1。 ALI:酷。 所以,这就像两个位运算符。 真棒。 罗伯:所以,现在我们要做的^。 ALI:如果我们都做吗? 罗伯:是的,因为我觉得我们要使用它 - 用之不尽的。 ALI:好吧。 所以 - 罗伯:我想我们不需要。 ALI:^作品中,你必须有一个真正的和一个假。 ^表示异或。 所以,现在它不是 - 如果x和y都是1,它现在假的。 这是区别^ |是,你可以有,如果x是 true或y为真,那么,我们是很好的。 ,^说,如果x为true,Y一定是假的,否则它不是真正的。 你有问题吗? 扬声器26:[听不清] ALI:是的。 这是一种类似。 罗伯:是啊,所以当你得到的,低级别的硬件的东西,这些都是 你正在处理的操作类型。 在硬件水平上,你将只处理位。 你不与数字打交道。 ALI:好了,^,或者如果你有1 ^ 0,应该是评估? 类:1。 ALI:酷。 如果你有 0 ^ 1?类:1。 ALI:酷。 0 ^ 0? 酷。 然后1 ^ 1? CLASS:0。 ALI:酷,真棒。 下一个 - Rob:我认为,这些都是我们要处理的。 我们只做到这些。 ALI:唯一的一次,我们将不得不这样做 - 罗伯:哦,那将是最后一个问题。 扬声器27:等待,再次呢? ALI:对不起,你的问题是什么? 扬声器27:你能解释一下再来一次? ^? SPEAKER 27:“Exclus” - 是啊。 ALI:那么,什么是“异或手段是必须有专门 一个真正的和一个假的,所以一个1和一个0,与OR,你可以有 - 其中之一是真实的,或它们两者都可以是真实的,因为它 以评估为true。 扬声器27:0和0是假的。 ALI:是的。 但是,如果你有1 | 1,将计算结果为true。 但是,如果你有1 ^ 1,与我们一样,计算结果为false。 因为它是不完全的,一个是真的。 ROB,这可能会或可能不会有帮助,但要注意,^ 等于采取| 减去。 实际上,你可以这样认为。 ^仅仅是“或”一切在一起,但采取的任何位 两者都是真实的。 所以返回其中两个是真实的一切。 |返回一方或双方是真实的一切。 因此,减去从|给你^。 ALI:有问题吗? 这是一个很大的信息。 每个人都好? 罗伯:我们可以去下一个问题,在未来的削减 是什么时候? 他们并不需要这一点,直到下一个问题。 ALI:我还以为是这一个。 罗伯:事实并非如此。 ALI:你确定吗? 罗伯:是的,我很积极。 ALI:我们为什么不开始做下一个问题吗? 再次,现在的问题是,改变它由小写转换为大写,而这 使用按位运算符。 罗伯:所以我们会 - 让我们开始用二进制表示的'A',资金'A', 这是65岁。 因此,在二进制 - 所以'A'= 65,=,以二进制 - 我要陷入困境数的0 - 。 ALI:所以给大家有意义吗? 因此,1,没有2,没有4S,没有8S,没有 - 没有16,没有32秒,然后一64。 罗伯:是的,我认为这是一个太多的0。 ALI:对不起。 罗伯:好了,我们有64集,我们有1套,并结合这些 在一起,我们得到65。 ALI:“酷豆”吗? 罗伯:所以,现在,小写字母的“A” - 注意到97 - 在97和65之间的区别是什么? 扬声器28:32。 罗伯:是的。 因此,它是32,这是它自己的位,所以这将是110001。 这是怎么回事所有可能的字符是真实的。 因此,如果我们认为'D',这将是68,那将是1000011。 然后小写字母“D”将是68加32,这是100,这是 要,这是相同的东西,只是翻转 32了,所以1100011。 所以,一个大写字母和小写字母之间的区别只是翻转 这是32位的位置。 扬声器29:是不是1000100? 罗伯:等待,它是100 - 我做错了的事。 这是不正确的。 我想,这是一个相差3,所以我只是坚持 二进制3月底。 这应该是正确的。 ALI:谢谢你。 适合指出了这一点。 这是尖锐的。 所有的权利,是明确的人吗? 罗伯:大写和小写版本之间的区别是 永远只是为32,所以它始终是一个单一的位 需要进行翻转,以改变两者之间的。 ALI:所以在这种情况下,知道之间的区别大写字母A和 小写的a是一个很好的事情。 不是在你的代码中,但至少在概念上,它是很好的。 所以,你们可以继续和代码,现在的空间​​。 或者我们应该讨论吗? 罗伯:我们可以讨论这个问题。 我不知道。 你们可以试试。 其中包括自己对话的一点。 我们会给你一个机会,它的代码。 [插入VOICES] ALI: - 是酷 扬声器30:这是黑客喜剧。 ALI:是啊,我们刚才说的消息,通过它。 罗布:我们回来了。 ALI:这是一种奇怪的。 我觉得我们应该有一个的CS50新闻站,我们可以 其实坐在这样。 罗伯:黑客新闻。 ALI:黑客新闻50。 ALI:随意问任何问题,如果你感到困惑。 罗伯:有没有人卡住了? ALI:是的,这是一个很好的事情。 ALI:等等​​,你停留在你的椅子吗? 哦。 我有点担心。 罗伯:因为我才意识到,我们会想 另一种按位运算符。 现在,让我们只是转换大写转换为小写。 ALI:很抱歉,我们每个人都得到公布? 我们打​​算从大写转换为小写。 罗伯:然后,我们将讨论小写字母为大写后。 哦,不。 我们有一个错误,我想,在此,我们从来没有尝试过运行。 哪一个是,字符c需要声明外循环,因为 它的范围被限制在回路中。 扬声器32:在这种情况下,错误的使用了一些? 罗伯:嗯,你不需要。 如果我保证你的资本'A' - 或者,小写字母'A'减去资本'A' 一个位,但你不知道它的32 - 事情会很好的工作,如果是16位被翻转 - 不,我想它wouldn't - 或64位被翻转的可能。 但你不应该需要使用32。 你也可以使用小写“”减去资本'A'。 扬声器32:好吧。 你可以做什么,如果你觉得你写的太多,你可以把它定义 在顶部。 所以,你可以像整型差异=小写“减去资本'A'。和 然后,您可以键入差异。 这是有效的。 但是,仅仅使用数32种 - 扬声器33:即使这是因为事实上,它是32位的吗? ALI:是的。 罗伯:有可能是 - 我们需要让你的唯一保证是,之间的差异 小写和大写是一个位。 它不应该的问题,它正好是32位的翻转。 对于时间上的考虑,我们将开始在这个。 没关系,如果你还没有完成。 不用担心这个。 罗伯:假设c是一个大写字母 - 我们不必假设c是一个大写字母。 我们知道,这个while循环后,c是一个大写字母 - do-whil​​e循环。 因此,这意味着它看起来是这样的'A'。因此,如果我们希望把这个 'A'这个'一'是什么,我们需要做什么? 那么,我们如何转换和翻转位? ALI:我们如何翻转呢? 罗伯:所以我们知道我们要翻转32位。 因此,将做'一'减'A',或者我们可以写32个,但 - 织补它,它周围的其他方式。 ALI:好了,,罗布这里的计算,这个数字,魔术32号。 于是,他找出该位翻转区将。 然后我们把其中问号? 罗伯:我们如何翻转位吗? 的大写字母,它是一个0,我们要成为1。 扬声器34:|。 罗伯:是的。 因此,这是我们说,我们采取'A'。我们“或”0 - 1000 - 和=。 ALI:给大家有意义吗? 我们可以通过它的点点滴滴,如果你想。 扬声器35:[听不见的? ALI:减号在哪里? 罗伯:哦,你的意思是在这里吗? ALI:哦,是的。 罗伯:所以我想这就是我们。 我们可以说32了,现在我们只是用按位运算符。 ALI:我们不喜欢的幻数。 我们不打算这样做。 此外,我觉得我们应该使用按位运算符 - 扬声器36:如果你使用^ A,你会得到32? 扬声器37:是的,我认为 - 罗伯:是的,你会的。 ALI:这是你怎么会做它去 从资本为小写。 现在,任何人都可以告诉我,为什么Rob和我改变了提示,我们如何去 从大写字母小写,而不是小写 大写的,因为我们以前做的呢? 有没有人有任何想法,为什么可能会更困难吗? 罗伯:所以,我们该怎么办 - ALI:是的,继续前进。 扬声器38 |运营商只有真正适合加入。 ALI:是的,没错。 罗伯:那么,我们想要做的小写转换为大写的情况下, 将这个'A' - 所以,我们希望把一些数字和一些操作,使 资本A.我们仍然可能使用32不知何故,但我们现在怎么办 得到这个出来这? 所以C - 哦,我还是希望这一点 - ALI:所以,现在如果我们由小写转换为大写再次,那么我们 ^操作,作为你们说。 罗伯:你可以做的事情还有其他的方法。 很多按位运算符是非常容易定义的条款 其他的按位运算符。 所以我打算不使用^或在所有,但^完全正常工作。 ALI:好吧,那么我们要去的最后一个问题,这是基本的 - 最后一个问题是将其转换成二进制的东西。 所以,举例来说,你有50个,然后将其转换成 二进制文件,这是110010。 我想你们都知道,从演讲二进制。 而你也应该把任何前导零。 罗伯:你现在可以忽略这部分。 的第一道关口,你可以做到这一点,以便有前导零。 然后,我们可以修改,有没有前导零,如果我们有时间。 ALI:所以不要担心。 只要设法得到的二进制。 一个很好的开始将是 - 罗伯:我们要问一个整数。 ALI:哦,是的,这是一个很好的一个。 我们可以从。 所以,你可以更改提示。 因此,而不是一个字符,现在我们正在处理的整数。 酷吧? 罗伯:现在是什么DO-WHILE状况又如何呢? 它的要求为一个非负整数。 ALI:我们什么时候要提示用户其他的东西吗? 当它小于0。 ALI:是的。 罗伯:,虽然i是小于0。 ALI:现在,我们需要将其转换。 你们有任何想法做什么? 任何端倪? 是啊。 扬声器39:我们必须将它转换,我们只是打印一些“0”和“1 这将是正确的号码? 你可以做一个for循环,并计算出2的幂? 罗伯:是的。 您不需要i转换的二进制数 - 的二进制表示我不适合里面的我。 您只需要打印的二进制表示我。 ALI:换句话说,你不需要去2的次方。 罗伯:因为我已经被存储为二进制文件,所以你不需要 将其转换为二进制。 只要在其二进制文件,并打印出来。 你将需要使用按位运算,因为你想看看 的实际位数。 您不需要使用按位运算,但请你。 这实际上是 - 你可以做乘以2的幂。 我们将讨论的最后两个二进制位运算符, 这是这一个。 所以,当你需要 - ALI:你可以通过他们的吗? 罗伯:是的。 因此,让我们一起去9。 所以9左移1 - 左移装置只是将所有的位移动到左边,并插入一个0。 因此,我们将所有的9位到左边的一个 位置,这让我们 - 所以注意到我们已经改变了一切离开,并插入一个0 右侧。 如果我们留下的两个改变,我们将改变一切所留下的两个, 并插入两个0来填补的空白。 问题吗? ALI:,然后右移做了类似的事情。 如果你有9右移1,然后你只需移动到的一切 的权利,你失去了一个数字,所以100。 罗伯:所以,你很好,你失去的位正好是所有 方式的权利。 有许多不同类型的右移,但基本上你能想到的 右移是除以2。 你能想到的左移乘以2。 所以,如果你转换本 - 如果您转换移位1,这是等于10010,如果你真的去了 通过二进制文件,并计算出那是什么,这纯粹是18。 我们只是乘以2。 1001左移2将是36。 我们乘以4。 好了,很酷,所以这一个,这是一个方便的按位运算符。 更多的混乱呢? 你们想尝试一下吗? 或者我们可以跳的权利,并开始了吗? 罗伯:我们应该马上英寸 ALI:是啊,好吧。 罗伯:,一起穿过它。 ALI:嗯,我会进入它。 所以,当他在开始时所说,我们要经历的点点滴滴。 因此,我们需要一个循环。 有没有人有一个想法,去最好的一种循环? 我们有while循环,do-whil​​e循环,for循环。 SPEAKER 40:do-whil​​e循环? 罗伯:所以请记住我说的前行约,我们只采用DO-WHILE 循环来获取用户输入。 你将永远不会非常以往任何时候都使用他们其他的事。 ALI:问题与do-whil​​e循环是它的东西之前,它会检查 的条件。 因此,它可以做坏事 - 喜欢的伤害 - 做一些事情,这是不可能的。 所以,你首先要检查。 罗伯:有很多的情况下,您可以使用do-whil​​e循环,但人们 不要指望你使用它们,除非它的用户输入。 因此,我们必须用我们的do-whil​​e循环。 多少次我们的循环要循环呢? 我们希望我的每个位的循环。 在我有多少位? 扬声器41:32。 ALI:是的。 罗伯:所以有32位。 我们不想说32。 ,而不是我们想说的大小 - ,你见过在课堂上吗? ALI:没有。 罗伯:为什么说使用 - 如sizeof(int)倍8 - ALI:所以,sizeof是 - 扬声器42:[听不清] ALI:有趣的。 所以,sizeof是一个内置的C函数,它只是告诉你 中的比特数 - 罗伯:字节。 ALI:字节,对不起 - 一个变量来存储值的字节的数目。 因此,我认为他走过去,在课堂上,然后,一个int是4个字节可能。 酷吧? 罗伯:但你不应该需要知道,一个int是4个字节。 你应该能够说 - 你应该使用sizeof(int)以4个字节。 其实,这是非常重要的一些事情。 一个int是4个字节。 在另一台计算机上,一个int可能是8个字节。 所以,你的程序将无法在该计算机上,因为你硬编码的32 位,当该计算机上正好是64位。 ALI:所以,你有的总数位,你想让它扭转。 罗布:字节和位之间的区别是, 是8位的字节。 因此,如sizeof(int)返回4个字节,那么我们就必须乘以 由8至32位。 ALI:好了,我们知道的最大,我们知道我们想要去 - 我们希望所有的人都去。 所以我们想从0到加numBits。 因此,没有人知道该如何写循环? 任何人? 扬声器43:[听不清] ALI:所以你要穿越我从第零位 第一位,第二位,第三位,所有的方式来加numBits。 位,你可以得到的最大数量。 罗伯:常见的循环中,我们使用了我们想要做的x倍的东西是什么? ALI:对于。 完美的。 因此,我们必须为。 然后,我们将创建一个迭代器,这不会是我。 ROB:J。 ALI:J = 0。 因此,我们会从0开始。 然后,我们要具备的条件,以确保,当你 每一次经历 - [插入VOICES] ROB:J。 ALI:j是小于加numBits。 因此,我们不希望做实际等于一,因为他们加numBits 总,我们从0开始。 因此,我们实际上有 - 扬声器44:哦。 ALI:索引不加numBits减1结束。 罗伯:我们标0到31,我们不标注1到32位。 ALI:然后我们每次递增1,因为我们要 检查每一个。 因此,我们将去J + +。 SPEAKER 45:你为什么这样做呢? 扬声器46:你为什么要通过的每一点吗? 罗伯:所以,我们要经过的每一点 - 因此,让我们说,我们有一些数字。 ALI:68。 罗伯:我们可以使用68。 因此,二进制文件将是100100。 所以这里面我和我们要在每一个这些位。 它是一个1? 打印1。 它是一个0? 打印0。 然后,我们去到下位。 它是一个1? 打印1。 0? 打印0。 ALI:冷,没事。 现在,我们该位是正确的索引。 我们怎样才能检查,具体的呢? 比方说,我们是在j = 0,所以我们要检查的位0指数。 所以,在这种情况下,这一个。 所以,现在我们怎么去检查 - 哦,这将是这一个。 罗伯:是的。 ALI:对不起。 我们将如何去检查一个,在一定意义上吗? 我们会检查它是否是一个0或1? 好let's - 类:1? ALI:然后呢? 是啊。 罗伯:所以我们说,我们已经有1。 然后这&,这将返回它是否是一个1或0。 ALI:所以我们可以走。 而我们能做的,你们说,这样做与功能。 罗伯:诠释 - 我想怎么说 - isOne我。 而我们正好要寻找的第一位,我们正在做的I&1。 现在我们要什么要和的第二位呢? 扬声器47:2。 罗伯:是的,第二,我们是2。 ALI:你会发现,1移动到左边的一个。 所以,我们学到了任何按位运算符来做到这一点功能? 罗伯:下一个 - ALI:是的,正确的,准确。 所以这是一个左移。 不要总是检查1,我们要转移。 多少次,我们要转移吗? 如果我们检查零级1,那么我们将它移到零。 是的,没错。 所以,你左移,由J。 完美的。 所以,现在我们知道 - 我们有这样的诠释,如果是1,然后 - Rob的一种欺骗 - 所以现在他会提前和他只是说,如果它实际上是1, 因为1的计算结果为true,所以我们也没有说ISF isOne等于1 - 等如果isOne,然后我们打印,否则我们打印0。 罗伯:所以我们的程序有一个整体的错误。 那么,上了这首的问题。 SPEAKER 48:你曾经把isOne内的四个业务运营的一部分, 然后转移自己的最后一部分? 所以isOne等于1,然后 - 罗伯:是的,你可以。 事实上,我们可以表明,一旦我们修复的错误,我要 与大家讨论。 请注意顺序,我们要过的事情。 由于这个二进制表示,我们开始的第零位。 如果是0,那么我们打印 - 好,这是一个0,所以我们打印了0。 然后我们去的第二位。 它是0,所以我们输出0。 然后,我们去到第三位。 这是1,所以我们打印1。 ALI:所以它的退步。 所以,你们怎么解决这个问题,我们走另一条路? 扬声器49:[听不清] 罗伯:是的。 所以,我们就去加numBits位为0,而不是从0到加numBits。 ALI:[听不清] 能始终走另一条路。 罗伯:NUMBITS减去1,因为这是最后的2-14 - ALI:因为它从0到31。 然后,我们将确保,它是大于0的,所以你不要去 太多的权利。 然后你将永远减去1到正确的。 罗伯:所以现在我们有一个反向循环,而且数量成印刷 以正确的方式。 SPEAKER 50:不,你必须改变换档的事情吗? ALI:没有。 罗伯:我们正在做同样的操作,但现在 在以相反的顺序。 因此,而不是做的移加numBits减1得到任何这 位,而这样做,最后,我们就先做到这一点。 扭转这种在这里,我们一切的顺序颠倒 内发生。 但我们并不想改变里面发生了什么在所有。 ALI:这是否有意义吗? 处理? 好了,所以没有任何人有任何其他的概念性的问题吗? ALI:在我们进入他的观点是 - ALI:好了,好走了。 罗布:使用j是我们的 - 而不是使用j总是转移,像一个左移Ĵ,我认为 你说的是什么样子,j使用。 因此,对于J - 我想这是很难的 - J = 1 << 31。 这是我想要的吗? 我认为这是<< 31。 J> = 1。 J >> >> isOne,I&J - 所以现在,而不是使用 - ALI:你不断移动,J,而不要有一个 索引进行检查。 这不是那么糟糕。 我们使用一个类似的逻辑。 所以,如果你回去 - 哦,但它会失去它。 好吧,你只是要再次键入它。 如果您发现我们有1 <<的Ĵ量的倍,而我们的 Ĵ每一次递增一个增薪点,但这次不是 他们做了增量的j在最里面的循环。 因此,而不是总是向下移动 - 罗伯:第一次迭代的for循环,我们必须,j为10000。 下一次迭代的for循环是01000。 下一次迭代。 1,要保持向下传播,直到我们打的很 最后,现在是这一点。 下一个,1的是,将要推离,而j是不再更大 大于或等于1。 我也可以把大于0,同样的差异。 然后,就是这样。 有问题吗? 是啊。 扬声器51:[听不清] 罗伯:所以这是一样的 - 你见过J + = 3? 因此,这是相同的J = J + 3? 你能做到这一点,几乎所有的运营商C. J >> = 3 等于到j = j的>> 3。 因此,按位运算符。 我不应该把31在这里。 我应该把加numBits - 1。 ALI:耶,没有什么神奇的数字。 好了,这是凌晨4点虽然,所以,如果你们有去 - 但是这是否有意义? 你们是否有任何其他的问题吗? Rob:我也打算扔掉的,如果我们想 - 他讨论了三元运算符呢? ALI:不可以。 这没关系。 罗伯:所以,你可以看看它下一次。 ALI:好了,真的吗? 你现在是在炫耀。 罗伯:不,现在it's - 这是得到人们的兴趣,而现在他们会去看看它。 因此,现在做同样的事情,一步到位。 因此,首先检查,I&J 1? 是真的吗? 如果是这样的话,打印,否则,打印0。 ALI:但是这样做的另一种方法是完美的罚款。 它具有相同的逻辑。 因此,它是一个不喜欢 - 罗伯:在这一点上,我们可以摆脱那些花括号,因为它是唯一的 一个线环。 ALI:好了,这有意义吗? 这是一个跳跃。 但它只是一种语法,更是这样。 酷吧? 任何其他的问题吗? 罗伯:所有权利。 ALI:好的,很酷。 感谢您的到来节。