• carZycriss
    2019-09-03
    请问老师,为什么在找可以被二十亿整除的数的时候会先出先20亿再出现负20亿和零,根据逻辑来说不是应该到二十亿以后开始溢出,然后就会出现一些乱七八糟的数,但是它还是输出了符合要求的数,不过根据被除数依次加一的情况来,应该不会输出负二十亿和0啊?

    作者回复:
    恭喜你戳中了一个经典问题。这里是我给出的一个关于补码的解释:https://github.com/geektime-geekbang/LetsJava/blob/master/FAQ/01%E7%AB%A0-%E5%85%B3%E4%BA%8E%E8%A1%A5%E7%A0%81%EF%BC%8C%E5%A4%9A%E8%AF%B4%E4%B8%A4%E5%8F%A5.md

    了解了补码,就知道了负数是怎么表示的了。那么正数是最高位的bit为0的数,CPU的加法运算其实并不管这么多,它就是按照二进制进行加法运算,进行进位。所以正数加阿加的溢出了,加到最高位为1了,就会变成负数。因为进位到了最高位(也就是符号位),符号位变成了1,就是负数了。

    那为什么是秒从正的二十几亿变成负的20几亿呢?还是因为补码,参见文章中对于补码数字表示的转换方式。

    
     2
  • 东方未晞
    2019-12-25
    我想说你视频里的整除和被整除说错了,b/a商为整数,余数为0,则称a可以整除b,或b可以被a整除。

    作者回复: dei dei dei,小学养成的坏毛病,一不注意就说错。

    
     1
  • Geek_421d56
    2019-10-21
    老师,请问有没有一些故意使用死循环的案例?

    作者回复:
    这种情况还是很多的。比如这个课程后面有个聊天程序的例程,接收消息的线程的逻辑就可以是一个while true循环。

    还有一些情况,可以将一些线程设置为守护线程,然后while true做一些事情,比如检查状态,打log等。

    当然,while true循环也是可以被break出来的。或者可能是类似while(stillworking)的形式存在的。

    官方类库也有类似的做法,最典型的就是ThreadPool里的Thread。

    
     1
  • 森淼
    2019-10-30
    本节课累加溢出示例在以后的程序开发中需要注意

    作者回复:
    是的, 如果吃不准可以用long. int看着挺大其实一不小心就会溢出

    
    
  • 振衣
    2019-07-19
    呵呵,挑个刺,do while 结尾的那个符号读分号,不读冒号。

    作者回复: 我经常嘴上分冒不分,虽然脑子里想的是正确的符号(反之你也不知道

    
    
  • 种个大西瓜
    2019-06-28
    for语句和while语句的使用场景有什么区别吗?感觉while实现的for都能实现

    作者回复: 看习惯,一般对于List等集合元素的遍历,习惯使用forEach语法。对于iterator,习惯使用while。这些在后面会学到。但是就像你说的,功能没有什么不一样。

    
    
  • EidLeung
    2019-06-12
    为什么溢出,会变成负数呢

    作者回复: 因为溢出的时候, 按照二进制加法的逻辑, 会进位, 但是最高位是符号位, 如果为 1 就代表为负数, 正是因为这个符号位, 加着加着太大了, 符号位变为1 就成了负数了.

    
    
我们在线,来聊聊吧