• 关于

    条件断点怎么安装

    的搜索结果

回答

转自:思否 本文作者:Michael van der Gulik 原文链接:《Why WebAssembly is a big deal》 译者:敖小剑 WebAssembly 是每个程序员都应该关注的技术。WebAssembly 会变得更流行。 WebAssembly 将取代 JavaScript。WebAssembly 将取代 HTML 和 CSS。 WebAssembly 将取代手机应用。WebAssembly 将取代桌面应用。在 10 年内,我保证每个程序员至少需要知道如何使用工具来操作 WebAssembly 并理解它是如何工作的。 你可能会说,“太离谱了!” 好吧,请继续阅读。 什么是 WebAssembly 当前形式的 WebAssembly 是 Web 浏览器的新扩展,可以运行预编译代码…快速地。在 C ++ 中编写了一些小代码,然后使用 Emscripten 编译器将该代码编译为 WebAssembly。通过一些 Javascript 粘合,就可以在 Web 浏览器中调用这一小段代码,例如,运行粒子模拟。 WebAssembly 文件,扩展名为.wasm,本身是包含可执行指令的二进制格式。要使用该文件,必须编写一个运行某些 Javascript 的 HTML 文件来获取、编译和执行 WebAssembly 文件。WebAssembly 文件在基于堆栈的虚拟机上执行,并使用共享内存与其 JavaScript 包装器进行通信。 到目前为止,这似乎并不有趣。它看起来只不过是 JavaScript 的加速器。但是,聪明的读者会对 WebAssembly 可能成为什么有所了解。 WebAssembly 将成为什么? 第一个重要发现是 WebAssembly 是一个安全的沙盒虚拟机。可以从 Internet 运行喜欢的 WebAssembly 代码,而确保它不会接管 PC 或服务器。四个主流 Web 浏览器对它的安全性非常有信心,它已经默认实现并启用了。它的真正安全性还有待观察,但安全性是 WebAssembly 的核心设计目标。 第二个重要发现是 WebAssembly 是一个通用的编译目标。它的原始编译器是一个 C 编译器,这个编译器很好地指示了 WebAssembly 虚拟机的低级和可重定向性。许多编程语言都使用 C 语言编写虚拟机,其他一些语言甚至使用 C 本身作为编译目标。 此时,有人整理了一个可以编译为 WebAssembly 的编程语言列表。这份名单将在未来很多年中继续增长。 WebAssembly 允许使用任何编程语言编写代码,然后让其他人在任何平台上安全地运行该代码,无需安装任何内容。朋友们,这是美好梦想的开始。 部署问题 我们来谈谈如何将软件提供给用户。 为新项目选择编程语言的一个重要因素是如何将项目部署到客户。您的程序员喜欢用 Haskell,Python,Visual Basic 或其他语言编写应用程序,具体取决于他们的喜好。要使用喜欢的语言,他们需要编译应用,制作一些可安装的软件包,并以某种方式将其安装在客户端的计算机上。有许多方法可以提供软件 - 包管理器,可执行安装程序或安装服务,如 Steam,Apple App Store,Google Play 或 Microsoft store。 每一个安装机制都意味着痛苦,从应用商店安装时的轻微疼痛,到管理员要求在他的 PC 上运行一些旧的 COBOL 代码时的集群头痛。 部署是一个问题。对于开发人员和系统管理员来说,部署一直是一个痛点。我们使用的编程语言与我们所针对的平台密切相关。如果大量用户在 PC 或移动设备上,我们使用 HTML 和 Javascript。如果用户是 Apple 移动设备用户,我们使用……呃…… Swift?(我实际上不知道)。如果用户在 Android 设备上,我们使用 Java 或 Kotlin。如果用户在真实计算机上并且愿意处理掉他们的部署问题,那么我们开发人员才能在我们使用的编程语言中有更多选择。 WebAssembly 有可能解决部署问题。 有了 WebAssembly,您可以使用任何编程语言编写应用,只要这些编程语言可以支持 WebAssembly,而应用可以在任何设备和任何具有现代 Web 浏览器的操作系统上运行。 硬件垄断 想购买台式机或笔记本电脑。有什么选择?好吧,有英特尔,有 AMD。多年来一直是双寡头垄断。保持这种双寡头垄断的一个原因是 x86 架构只在这两家公司之间交叉许可,而且通常预编译的代码需要 x86 或 x86-64(也就是 AMD-64)架构。还有其他因素,例如设计世界上最快的 CPU 是一件很艰难但也很昂贵的事情。 WebAssembly 是一种可让您在任何平台上运行代码的技术(之一)。如果它成为下一个风口,硬件市场将变得商品化。应用编译为 WebAssembly,就可以在任何东西上运行 - x86,ARM,RISC-V,SPARC。即便是操作系统市场也会商品化;您所需要的只是一个支持 WebAssembly 的浏览器,以便在硬件可以运行时运行最苛刻的应用程序。 编者注:Second State 研发的专为服务端优化的 WebAssembly 引擎 SSVM 已经可以运行在高通骁龙芯片上。Github 链接:https://github.com/second-sta... 云计算 但等等,还有更多。云计算成为IT经理办公室的流行词已有一段时间,WebAssembly 可以直接迎合它。 WebAssembly 在安全沙箱中执行。可以制作一个容器,它可以在服务器上接受和执行 WebAssembly 模块,而资源开销很小。对于提供的每个服务,无需在虚拟机上运行完整的操作系统。托管提供商只提供对可以上传代码的WebAssembly 容器的访问权限。它可以是一个原始容器,接收 socket 并解析自己的 HTTP 连接,也可以是一个完整的 Web 服务容器,其中 WebAssembly 模块只需要处理预解析的HTTP请求。 这还不存在。如果有人想变得富有,那么可以考虑这个想法。 编者注:目前已经有人正在实现这个想法,Byte Alliance 计划将WebAssembly 带到浏览器之外,Second State 已经发布了为服务端设计的WebAssembly 引擎开发者预览版。 不是云计算 WebAssembly 足以取代 PC 上本地安装的大多数应用程序。我们已经使用 WebGL(又名OpenGL ES 2.0)移植了游戏。我预测不久之后,受益于WebAssembly,像 LibreOffice 这样的大型应用可以直接从网站上获得,而无需安装。 在这种情况下,在本地安装应用没什么意义。本地安装的应用和 WebAssembly 应用之间几乎没有区别。WebAssembly 应用已经可以使用屏幕,键盘和鼠标进行交互。它可以在 2D 或 OpenGL 中进行图形处理,并使用硬件对视频流进行解码。可以播放和录制声音。可以访问网络摄像头。可以使用 WebSockets。可以使用 IndexedDB 存储大量数据在本地磁盘上。这些已经是 Web 浏览器中的标准功能,并且都可以使用 JavaScript 向 WebAssembly 暴露。 目前唯一困难的地方是 WebAssembly 无法访问本地文件系统。好吧,可以通过 HTML 使用文件上传对话,但这不算。最终,总会有人为此创建 API,并可能称之为 “WASI”。 “从互联网上运行应用程序!?胡说八道!“,你说。好吧,这是使用 Qt 和 WebAssembly 实现的文本编辑器 (以及更多)。 这是一个简单的例子。复杂的例子是在 WebBrowser 中运行的 Adobe Premier Pro 或 Blender。或者考虑像 Steam 游戏一样可以直接从网络上运行。这听起来像小说,但从技术上说这并非不能发生。 它会来的。 让我们裸奔! 目前,WebAssembly 在包含 HTML 和 Javascript 包装器的环境中执行。为什么不脱掉这些?有了 WebAssembly,为什么还要在浏览器中包含 HTML 渲染器和 JavaScript 引擎? 通过为所有服务提供标准化 API,这些服务通常是 Web 浏览器提供的,可以创建裸 WebAssembly。就是没有 HTML和 Javascript 包装来管理的 WebAssembly。访问的网页是 .wasm 文件,浏览器会抓取并运行该文件。浏览器为WebAssembly 模块提供画布,事件处理程序以及对浏览器提供的所有服务的访问。 这目前还不存在。如果现在使用 Web 浏览器直接访问 .wasm 文件,它会询问是否要下载它。我假设将设计所需的 API 并使其工作。 结果是 Web 可以发展。网站不再局限于 HTML,CSS 和 Javascript。可以创建全新的文档描述语言。可以发明全新的布局引擎。而且,对于像我这样的 polyglots 最相关,我们可以选择任何编程语言来实现在线服务。 可访问性 但我听到了强烈抗议!可访问性怎么样??搜索引擎怎么办? 好吧,我还没有一个好的答案。但我可以想象几种技术解决方案。 一个解决方案是我们保留内容和表现的分离。内容以标准化格式编写,例如 HTML。演示文稿由 WebAssembly 应用管理,该应用可以获取并显示内容。这允许网页设计师使用想要的任何技术进行任意演示 - 不需要 CSS,而搜索引擎和需要不同类型的可访问性的用户仍然可以访问内容。 请记住,许多 WebAssembly 应用并不是可以通过文本访问的,例如游戏和许多应用。盲人不会从图像编辑器中获得太多好处。 另一个解决方案是发明一个 API,它可以作为 WebAssembly 模块,来提供想在屏幕上呈现的 DOM,供屏幕阅读器或搜索引擎使用。基本上会有两种表示形式:一种是在图形画布上,另一种是产生结构化文本输出。 第三种解决方案是使用屏幕阅读器或搜索引擎可以使用的元数据来增强画布。执行 WebAssembly 并在画布上呈现内容,其中包含描述渲染内容的额外元数据。例如,该元数据将包括屏幕上的区域是否是菜单以及存在哪些选项,或者区域是否想要文本输入,以及屏幕上的区域的自然排序(也称为标签顺序)是什么。基本上,曾经在 HTML 中描述的内容现在被描述为具有元数据的画布区域。同样,这只是一个想法,它可能在实践中很糟糕。 可能是什么 1995年,Sun Microsystems 发布了 Java,带有 Java applets 和大量的宣传。有史以来第一次,网页可以做一些比 和 GIF 动画更有趣的事情。开发人员可以使应用完全在用户的 Web 浏览器中运行。它们没有集成到浏览器中,而是实现为繁重的插件,需要安装整个 JVM。1995年,这不是一个小的安装。applets 也需要一段时间来加载并使用大量内存。我们现在凭借大量内存,这不再是一个问题,但在 Java 生命的第一个十年里,它让体验变得令人厌烦。 applets 也不可靠。无法保证它们会运行,尤其是在用户使用 Microsoft 的实现时。他们也不安全,这是棺材里的最后一颗钉子。 以 JVM 为荣,其他语言最终演变为在 JVM 上运行。但现在,那艘船航行了。 FutureSplash / Macromedia / Adobe Flash 也是一个竞争者,但是是专有的,具有专有工具集和专有语言的专有格式。我读到他们确实在2009年开启了文件格式。最终从浏览器中删除了支持,因为它存在安全风险。 这里的结论是,如果希望您的技术存在于每个人的机器上,那么安全性就需要正视。我真诚地希望 WebAssembly 作为标准对安全问题做出很好的反应。 需要什么? WebAssembly 仍处于初期阶段。它目前能很好的运行代码,而规范版本是 1.0,二进制格式定型。目前正在开展SIMD 指令支持。通过 Web Workers 进行多线程处理也正在进行中。 工具可用,并将在未来几年不断改进。浏览器已经让你窥视 WebAssembly 文件。至少 Firefox 允许查看WebAssembly 字节码,设置断点并查看调用堆栈。我听说浏览器也有 profiling 支持。 语言支持包括一套不错的语言集合–C,C++和Rust是一流的公民。C#,Go和Lua显然有稳定的支持。Python,Scala,Ruby,Java和Typescript都有实验性支持。这可能是一个傲慢的陈述,但我真的相信任何想要在21世纪存在的语言都需要能够在 WebAssembly 上编译或运行。 在访问外部设备的 API 支持方面,我所知道的唯一可用于裸 WebAssembly 的 API 是 WASI,它允许文件和流访问等核心功能,允许 WebAssembly 在浏览器外运行。否则,任何访问外部世界的 API 都需要在浏览器中的 Javascript 中实现。除了本地机器上的文件访问,打印机访问和其他新颖的硬件访问(例如非标准蓝牙或USB设备)之外,应用所需的一切几乎都可以满足。“裸WebAssembly”并不是它成功的必要条件; 它只是一个小的优化,不需要浏览器包含对 HTML,CSS 或 Javascript 的支持。 我不确定在桌面环境中让 WebAssembly 成为一等公民需要什么。需要良好的复制和粘贴支持,拖放支持,本地化和国际化,窗口管理事件以及创建通知的功能。也许这些已经可以从网络浏览器中获得; 我经常惊讶与已经可能的事情。 引发爆炸的火花是创建允许现有应用移植的环境。如果创造了“用于 WebAssembly 的 Linux 子系统”,那么可以将大量现有的开源软件移植到 WebAssembly 上。它需要模拟一个文件系统 - 可以通过将文件系统的所有只读部分都缓存为 HTTP 请求来完成,并且所有可写部分都可以在内存中,远程存储或使用浏览器可以提供的任何文件访问。图形支持可以通过移植 X11 或 Wayland 的实现来使用 WebGL(我理解已经作为 AIGLX 存在?)。 一些 SDL 游戏已经被移植到 WebAssembly - 最着名的是官方演示。 一旦 JVM 在 WebAssembly 中运行,就可以在浏览器中运行大量的 Java 软件。同样适用于其他虚拟机和使用它们的语言。 与 Windows 软件的巨大世界一样,我没有答案。WINE 和 ReactOS 都需要底层的 x86 或 x86-64 机器,所以唯一的选择是获取源代码并移植它,或者使用 x86 模拟器。 尾声 WebAssembly 即将到来。 它来得很慢,但现在所有的部分都可以在你正在使用的浏览器上使用。现在我们等待构建用于从各种编程语言中定位 WebAssembly 的基础设施。一旦构建完成,我们将摆脱 HTML,CSS 和 Javascript 的束缚。 加入阿里云钉钉群享福利:每周技术直播,定期群内有奖活动、大咖问答 阿里云开发者社区

茶什i 2020-01-07 10:32:35 0 浏览量 回答数 0

回答

Linux这么多命令,通常会让初学者望而生畏。下面是我结合日常工作,以及在公司的内部培训中,针对对Linux不是很熟悉的同学,精选的一批必须要搞懂的命令集合。 任何一个命令其实都是可以深入的,比如tail -f和tail -F的区别。我们不去关心,只使用最常见的示例来说明。本文不会教你具体的用法,那是抢man命令的饭碗。这只是个引导篇,力求简洁。 学习方式:多敲多打,用条件反射替代大脑记忆—如果你将来或者现在要用它来吃饭的话。其中,也有一些难啃的骨头,关注小姐姐味道微信公众号,我们一起用锋利的牙齿,来把它嚼碎。 内容: ✔ 目录操作 ✔ 文本处理 ✔ 压缩 ✔ 日常运维 ✔ 系统状态概览 ✔ 工作常用 目录操作 工作中,最常打交道的就是对目录和文件的操作。linux提供了相应的命令去操作他,并将这些命令抽象、缩写。 基本操作 可能是这些命令太常用了,多打一个字符都是罪过。所以它们都很短,不用阿拉伯数字,一个剪刀手就能数过来。 看命令。 mkdir 创建目录 make dir cp 拷贝文件 copy mv 移动文件 move rm 删除文件 remove 例子: # 创建目录和父目录a,b,c,d mkdir -p a/b/c/d # 拷贝文件夹a到/tmp目录 cp -rvf a/ /tmp/ # 移动文件a到/tmp目录,并重命名为b mv -vf a /tmp/b # 删除机器上的所有文件 rm -rvf / 漫游 linux上是黑漆漆的命令行,依然要面临人生三问:我是谁?我在哪?我要去何方? ls 命令能够看到当前目录的所有内容。ls -l能够看到更多信息,判断你是谁。 pwd 命令能够看到当前终端所在的目录。告诉你你在哪。 cd 假如你去错了地方,cd命令能够切换到对的目录。 find find命令通过筛选一些条件,能够找到已经被遗忘的文件。 至于要去何方,可能就是主宰者的意志了。 文本处理 这是是非常非常加分的技能。get到之后,也能节省更多时间来研究面向对象。 查看文件 cat 最常用的就是cat命令了,注意,如果文件很大的话,cat命令的输出结果会疯狂在终端上输出,可以多次按ctrl+c终止。 # 查看文件大小 du -h file # 查看文件内容 cat file less 既然cat有这个问题,针对比较大的文件,我们就可以使用less命令打开某个文件。 类似vim,less可以在输入/后进入查找模式,然后按n(N)向下(上)查找。 有许多操作,都和vim类似,你可以类比看下。 tail 大多数做服务端开发的同学,都了解这么命令。比如,查看nginx的滚动日志。 tail -f access.log tail命令可以静态的查看某个文件的最后n行,与之对应的,head命令查看文件头n行。但head没有滚动功能,就像尾巴是往外长的,不会反着往里长。 tail -n100 access.log head -n100 access.log 统计 sort和uniq经常配对使用。 sort可以使用-t指定分隔符,使用-k指定要排序的列。 下面这个命令输出nginx日志的ip和每个ip的pv,pv最高的前10 #2019-06-26T10:01:57+08:00|nginx001.server.ops.pro.dc|100.116.222.80|10.31.150.232:41021|0.014|0.011|0.000|200|200|273|-|/visit|sign=91CD1988CE8B313B8A0454A4BBE930DF|-|-|http|POST|112.4.238.213 awk -F"|" '{print $3}' access.log | sort | uniq -c | sort -nk1 -r | head -n10 其他 grep grep用来对内容进行过滤,带上--color参数,可以在支持的终端可以打印彩色,参数n则输出具体的行数,用来快速定位。 比如:查看nginx日志中的POST请求。 grep -rn --color POST access.log 推荐每次都使用这样的参数。 如果我想要看某个异常前后相关的内容,就可以使用ABC参数。它们是几个单词的缩写,经常被使用。 A after 内容后n行 B before 内容前n行 C count? 内容前后n行 就像是这样: grep -rn --color Exception -A10 -B2 error.log diff diff命令用来比较两个文件是否的差异。当然,在ide中都提供了这个功能,diff只是命令行下的原始折衷。对了,diff和patch还是一些平台源码的打补丁方式,你要是不用,就pass吧。 压缩 为了减小传输文件的大小,一般都开启压缩。linux下常见的压缩文件有tar、bzip2、zip、rar等,7z这种用的相对较少。 .tar 使用tar命令压缩或解压 .bz2 使用bzip2命令操作 .gz 使用gzip命令操作 .zip 使用unzip命令解压 .rar 使用unrar命令解压 最常用的就是.tar.gz文件格式了。其实是经过了tar打包后,再使用gzip压缩。 创建压缩文件 tar cvfz archive.tar.gz dir/ 解压 tar xvfz. archive.tar.gz 日常运维 开机是按一下启动按钮,关机总不至于是长按启动按钮吧。对了,是shutdown命令,不过一般也没权限-.-!。passwd命令可以用来修改密码,这个权限还是可以有的。 mount mount命令可以挂在一些外接设备,比如u盘,比如iso,比如刚申请的ssd。可以放心的看小电影了。 mount /dev/sdb1 /xiaodianying chown chown 用来改变文件的所属用户和所属组。 chmod 用来改变文件的访问权限。 这两个命令,都和linux的文件权限777有关。 示例: # 毁灭性的命令 chmod 000 -R / # 修改a目录的用户和组为 xjj chown -R xjj:xjj a # 给a.sh文件增加执行权限(这个太常用了) chmod a+x a.sh yum 假定你用的是centos,则包管理工具就是yum。如果你的系统没有wget命令,就可以使用如下命令进行安装。 yum install wget -y systemctl 当然,centos管理后台服务也有一些套路。service命令就是。systemctl兼容了service命令,我们看一下怎么重启mysql服务。 推荐用下面这个。 service mysql restart systemctl restart mysqld 对于普通的进程,就要使用kill命令进行更加详细的控制了。kill命令有很多信号,如果你在用kill -9,你一定想要了解kill -15以及kill -3的区别和用途。 su su用来切换用户。比如你现在是root,想要用xjj用户做一些勾当,就可以使用su切换。 su xjj su - xjj -可以让你干净纯洁的降临另一个账号,不出意外,推荐。 系统状态概览 登陆一台linux机器,有些命令能够帮助你快速找到问题。这些命令涵盖内存、cpu、网络、io、磁盘等。 uname uname命令可以输出当前的内核信息,让你了解到用的是什么机器。 uname -a ps ps命令能够看到进程/线程状态。和top有些内容重叠,常用。 找到java进程 ps -ef|grep java top 系统状态一览,主要查看。cpu load负载、cpu占用率。使用内存或者cpu最高的一些进程。下面这个命令可以查看某个进程中的线程状态。 top -H -p pid free top也能看内存,但不友好,free是专门用来查看内存的。包括物理内存和虚拟内存swap。 df df命令用来查看系统中磁盘的使用量,用来查看磁盘是否已经到达上限。参数h可以以友好的方式进行展示。 df -h ifconfig 查看ip地址,不啰嗦,替代品是ip addr命令。 ping 至于网络通不通,可以使用ping来探测。(不包括那些禁ping的网站) netstat 虽然ss命令可以替代netstat了,但现实中netstat仍然用的更广泛一些。比如,查看当前的所有tcp连接。 netstat -ant 此命令,在找一些本地起了什么端口之类的问题上,作用很大。 工作常用 还有一些在工作中经常会用到的命令,它们的出现频率是非常高的 ,都是些熟面孔。 export 很多安装了jdk的同学找不到java命令,export就可以帮你办到它。export用来设定一些环境变量,env命令能看到当前系统中所有的环境变量。比如,下面设置的就是jdk的。 export PATH=$PATH:/home/xjj/jdk/bin 有时候,你想要知道所执行命令的具体路径。那么就可以使用whereis命令,我是假定了你装了多个版本的jdk。 crontab 这就是linux本地的job工具。不是分布式的,你要不是运维,就不要用了。比如,每10分钟提醒喝茶上厕所。 */10 * * * * /home/xjj/wc10min date date命令用来输出当前的系统时间,可以使用-s参数指定输出格式。但设置时间涉及到设置硬件,所以有另外一个命令叫做hwclock。 xargs xargs读取输入源,然后逐行处理。这个命令非常有用。举个栗子,删除目录中的所有class文件。 find . | grep .class$ | xargs rm -rvf #把所有的rmvb文件拷贝到目录 ls *.rmvb | xargs -n1 -i cp {} /mount/xiaodianying 网络 linux是一个多作业的网络操作系统,所以网络命令有很多很多。工作中,最常和这些打交道。 ssh 这个,就不啰嗦了。你一定希望了解ssh隧道是什么。你要是想要详细的输出过程,记得加参数-v。 scp scp用来进行文件传输。也可以用来传输目录。也有更高级的sftp命令。 scp a.txt 192.168.0.12:/tmp/a.txt scp -r a_dir 192.168.0.12:/tmp/ wget 你想要在服务器上安装jdk,不会先在本地下载下来,然后使用scp传到服务器上吧(有时候不得不这样)。wget命令可以让你直接使用命令行下载文件,并支持断点续传。 wget -c http://oracle.fuck/jdk2019.bin mysql mysql应用广泛,并不是每个人都有条件用上navicat的。你需要了解mysql的连接方式和基本的操作,在异常情况下才能游刃有余。 mysql -u root -p -h 192.168.1.2

问问小秘 2020-04-01 10:52:50 0 浏览量 回答数 0

回答

追加:目测代码逻辑完全没错,只是K值的问题,long类型的K值因为不断的相乘,超过long的上限值,恭喜,在某一次相乘的时候,k值duang一下变成0了,所以,换一种方法吧,题主可以自己断点测试一下,最后k是变成0的######回复 @月生无界 : 客气客气######回复 @月影南溪 : 感谢提出######数据溢出不会变0的###### 月生无界正确地说出了long 型的取值范围。特此,我将从前写的代码展示如下, 来表明JAVA不同类型的变量的取值范围: public class Limits{        public static void main(String args[]){ /* 打印六种数字基本类型变量的最大值和最小值 */   System.out.println("长型最大值 LONG_Max: " + Long.MAX_VALUE); System.out.println("长型最小值 LONG_Min: " + Long.MIN_VALUE); System.out.println("整型最大值 Int_Max: " + Integer.MAX_VALUE); System.out.println("整型最小值 Int_Min: " + Integer.MIN_VALUE); System.out.println("短型最大值 SHORT_Max: " + Short.MAX_VALUE); System.out.println("短型最小值 SHORT_Min: " + Short.MIN_VALUE); System.out.println("字节型最大值 BYTE_Max: " + Byte.MAX_VALUE); System.out.println("字节型最小值 BYTE_Min: " + Byte.MIN_VALUE); //System.out.println("浮点型最大值 FLOAT_Max: " + Float.MAX_VALUE); //System.out.println("浮点型最小值 FLOAT_Min: " + Float.MIN_VALUE); //System.out.println("双精度型最大值 DOUBLE_Max: " + Double.MAX_VALUE); //System.out.println("双精度型最小值 DOUBLE_Min: " + Double.MIN_VALUE);        } } 输出:   长型最大值 LONG_Max: 9223372036854775807 长型最小值 LONG_Min: -9223372036854775808 整型最大值 Int_Max: 2147483647 整型最小值 Int_Min: -2147483648 短型最大值 SHORT_Max: 32767 短型最小值 SHORT_Min: -32768 字节型最大值 BYTE_Max: 127 字节型最小值 BYTE_Min: -128 ..........   就拿计算阶乘为例,以下代码,可以检查JAVA 输出数据的有效性。 public class Factoria { public static void main(String args[]) { //主方法代码块开始 int iFactoria=1;    //用整型存储阶乘 long lFactoria=1; //用长型存储阶乘 for (int i=1; i<17;i++){ //用for循环语句输出1到16的阶乘    iFactoria *=i;  //将i的阶乘存入整型变量    lFactoria *=i;  //将i的阶乘存入长型变量    /* 分别输出存于整型变量和长型变量的阶乘 */    System.out.printf(" %d 的阶乘:\t %10d(int), %15d(long)\n",        i, iFactoria, lFactoria);        }    System.out.printf("最大整型:%12d, 最大长型: %d\n",        Integer.MAX_VALUE,Long.MAX_VALUE);   }  //主方法 main 代码块结束结束 }  // 类 Factoria 定义结束   输出:   1 的阶乘:                1(int),               1(long)  2 的阶乘:                2(int),               2(long)  3 的阶乘:                6(int),               6(long)  4 的阶乘:               24(int),              24(long)  5 的阶乘:              120(int),             120(long)  6 的阶乘:              720(int),             720(long)  7 的阶乘:             5040(int),            5040(long)  8 的阶乘:            40320(int),           40320(long)  9 的阶乘:           362880(int),          362880(long)  10 的阶乘:         3628800(int),         3628800(long)  11 的阶乘:        39916800(int),        39916800(long)  12 的阶乘:       479001600(int),       479001600(long)  13 的阶乘:      1932053504(int),      6227020800(long)  14 的阶乘:      1278945280(int),     87178291200(long)  15 的阶乘:      2004310016(int),   1307674368000(long)  16 的阶乘:      2004189184(int),  20922789888000(long) 最大整型:  2147483647, 最大长型: 9223372036854775807   这里, *      阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。N的阶乘可表示为n!=1×2×3×……×n 或 n!=n×(n-1)! *      用整型(int), 13的阶乘是: 6227020800,超过了 整型变量 int可以表示的最大正整数: 2147483647。 因此,13 或更大的阶乘数据,不能用整型int 表示。以上输出结果表明,用整型int变量存储的阶乘数据,若阶数超过12, 均不正确。 *      以上用长型变量输出的阶乘,尚且是正确的。但,它也有个限度, 17以上的阶乘, 就是“垃圾”了。 *     数学家定义,0!=1,所以0!=1! ######算法有问题,怎么判断素数,这个数学问题先搞清楚,然后再写程序,要不然全是乱的###### package test; public class Test { public static void main(String[] args) { String num = "素数:"; for(int i=2;i<=1000;i++){ //特殊值处理 if(i == 2){ num += i+","; //System.out.println("素数:"+i); }else{ //素数判断条件,从2开始除,取余,如果余值为0,表示不是素数,跳出这个数的循环判断, for(int j=2;j<i;j++){ if(i%j == 0){ break; } //判断是否是素数,能除到比该值小一,且余数不为0,肯定是素数 if(i%j != 0 && j == i-1){ num += i+","; //System.out.println("素数:"+i); } } } } System.out.println(num); } } //好人都是直接贴代码的 ###### 埃拉托色尼筛选法(Sieve of Eratosthenes) 也可以尝试。 import java.util.*; public class Eratosthenes{ // 埃拉托色尼筛选法 public static void main(String args[]){ int i,j; boolean b[]=new boolean[50]; for(i=0;i<b.length;i++) b[i]=true; //将数组的元素全部赋以true for ( i = 2; i < b.length; i++ ) // 从下标2开始递增循环 if ( b[ i ] ==true){// 每次找到值为true的元素 for (j =i+1;j < b.length;j++ ){ /* 就用其下标作为除数,去除往后余下的元素的下标*/ if (j%i == 0 ) //一旦能除尽 b[j] = false;// 将对应的元素值改为false } } for (i=2;i<b.length;i++ )//从2起,打印50以内的质数 if (b[ i ]) //若元素值为true System.out.printf("%4d", i);// 打印出该元素的下标 } } ###### 我已经将 tcxu 和 月生无界 所出示的代码,翻译成 PHP, 运行结果证明两种算法有效。 http://www.oschina.net/code/snippet_2756874_56652 ###### 查看楼主的代码发现, 你应当把 7 行的右花括号”}“,移到17行后边。这样,你的意向就对了: 从 第 9 行 至 第 17 行 处理 (k==0)的情况。从 18行 至 21 行,处理的是 (k != 0 的情况) ######k*(i%j)数值过大溢出了。 for(long j=2;j<i;j++){ k=i%j if(k==0) System.out.print(" "+i+"不是素数,有约数:"); break } ###### 不明白 ”k*(i%j)数值过大溢出了” 的情况 是什么情况? 指的是 这里的数值过大? 超过了 long型所能存储的最大数值 (2的63次方减 1)? 这里的数值并不大呀。 我这里没有安装Java环境,所以,参照楼主的代码,写出java脚本 代码,JavaScript 如下: 测试证明,楼主确实应当把 11 行 的 右花括号 ’ } ‘,移到 17 行:System.out.println(); 的后面。 <html> <head> <meta charset="gb2312"> <title>求1000以内的素数</title> <style> </style> </head> <body> <script>  var n=1; for (var i=1; i<1000;i++){ var k=1; for (var j=2;j<i;j++){ k=k*(i%j); } if (k==0){ //处理 不是素数的情况 document.write( i + " 不是素数,有约数: "); for (var j=2;j<i;j++) if (i%j==0){ document.write( j + " "); } document.write("<br>"); } else if (k !=0){ //处理素数的情况 document.write( "第 " + n +  " 个素数是:" + i + "<br>"); n++; } } </script> </body> </html> ######long取值范围:-9223372036854775808 -到9223372036854775807,明天再测试一下,long的最大值再乘其他数在代码中是否会变成0返回###### 引用来自“tcxu”的评论 月生无界正确地说出了long 型的取值范围。特此,我将从前写的代码展示如下, 来表明JAVA不同类型的变量的取值范围: public class Limits{        public static void main(String args[]){ /* 打印六种数字基本类型变量的最大值和最小值 */   System.out.println("长型最大值 LONG_Max: " + Long.MAX_VALUE); System.out.println("长型最小值 LONG_Min: " + Long.MIN_VALUE); System.out.println("整型最大值 Int_Max: " + Integer.MAX_VALUE); System.out.println("整型最小值 Int_Min: " + Integer.MIN_VALUE); System.out.println("短型最大值 SHORT_Max: " + Short.MAX_VALUE); System.out.println("短型最小值 SHORT_Min: " + Short.MIN_VALUE); System.out.println("字节型最大值 BYTE_Max: " + Byte.MAX_VALUE); System.out.println("字节型最小值 BYTE_Min: " + Byte.MIN_VALUE); //System.out.println("浮点型最大值 FLOAT_Max: " + Float.MAX_VALUE); //System.out.println("浮点型最小值 FLOAT_Min: " + Float.MIN_VALUE); //System.out.println("双精度型最大值 DOUBLE_Max: " + Double.MAX_VALUE); //System.out.println("双精度型最小值 DOUBLE_Min: " + Double.MIN_VALUE);        } } 输出:   长型最大值 LONG_Max: 9223372036854775807 长型最小值 LONG_Min: -9223372036854775808 整型最大值 Int_Max: 2147483647 整型最小值 Int_Min: -2147483648 短型最大值 SHORT_Max: 32767 短型最小值 SHORT_Min: -32768 字节型最大值 BYTE_Max: 127 字节型最小值 BYTE_Min: -128 ..........   就拿计算阶乘为例,以下代码,可以检查JAVA 输出数据的有效性。 public class Factoria { public static void main(String args[]) { //主方法代码块开始 int iFactoria=1;    //用整型存储阶乘 long lFactoria=1; //用长型存储阶乘 for (int i=1; i<17;i++){ //用for循环语句输出1到16的阶乘    iFactoria *=i;  //将i的阶乘存入整型变量    lFactoria *=i;  //将i的阶乘存入长型变量    /* 分别输出存于整型变量和长型变量的阶乘 */    System.out.printf(" %d 的阶乘:\t %10d(int), %15d(long)\n",        i, iFactoria, lFactoria);        }    System.out.printf("最大整型:%12d, 最大长型: %d\n",        Integer.MAX_VALUE,Long.MAX_VALUE);   }  //主方法 main 代码块结束结束 }  // 类 Factoria 定义结束   输出:   1 的阶乘:                1(int),               1(long)  2 的阶乘:                2(int),               2(long)  3 的阶乘:                6(int),               6(long)  4 的阶乘:               24(int),              24(long)  5 的阶乘:              120(int),             120(long)  6 的阶乘:              720(int),             720(long)  7 的阶乘:             5040(int),            5040(long)  8 的阶乘:            40320(int),           40320(long)  9 的阶乘:           362880(int),          362880(long)  10 的阶乘:         3628800(int),         3628800(long)  11 的阶乘:        39916800(int),        39916800(long)  12 的阶乘:       479001600(int),       479001600(long)  13 的阶乘:      1932053504(int),      6227020800(long)  14 的阶乘:      1278945280(int),     87178291200(long)  15 的阶乘:      2004310016(int),   1307674368000(long)  16 的阶乘:      2004189184(int),  20922789888000(long) 最大整型:  2147483647, 最大长型: 9223372036854775807   这里, *      阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。N的阶乘可表示为n!=1×2×3×……×n 或 n!=n×(n-1)! *      用整型(int), 13的阶乘是: 6227020800,超过了 整型变量 int可以表示的最大正整数: 2147483647。 因此,13 或更大的阶乘数据,不能用整型int 表示。以上输出结果表明,用整型int变量存储的阶乘数据,若阶数超过12, 均不正确。 *      以上用长型变量输出的阶乘,尚且是正确的。但,它也有个限度, 17以上的阶乘, 就是“垃圾”了。 *     数学家定义,0!=1,所以0!=1! 真有耐心,我只做了一个简单的测试,发现一些有趣的事情,希望得到正确的解答 上代码 long min = -9223372036854775808L; long max = 9223372036854775807L; System.out.println(min*1+","+min*2+","+min*3+","+min*4); System.out.println(max*1+","+max*2+","+max*3+","+max*4); 结果:-9223372036854775808,0,-9223372036854775808,0 9223372036854775807,-2,9223372036854775805,-4 long的最小最大值从1乘到4,会出现各种结果,不是很懂其中的原理

爱吃鱼的程序员 2020-06-03 16:40:47 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站