Java与C语言中取模运算符%的区别对比

news2025/2/23 20:06:14

在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: Java

文章目录

  • 💯前言
  • 💯C语言中的取模运算符 `%`
    • 基本行为
      • 示例
    • 注意事项
      • 示例:负数取模
  • 💯Java中的取模运算符 `%`
    • 基本行为
      • 示例
    • 对浮点数的支持
      • 示例:浮点数取模
    • 符号规则
      • 示例:负数取模
  • 💯C语言与Java中的 `%` 运算符的对比
    • 1. 支持的数据类型
    • 2. 负数余数的符号规则
    • 3. 浮点数支持
    • 4. 除法和取模的关系
  • 💯小结


💯前言

  • 在程序设计中,取模运算符 % 是非常常见的操作符,它用于计算两个数字相除后的余数。不同的编程语言对取模运算符的实现和使用会有所不同,今天我们将通过对比Java和C语言中的 % 运算符,详细了解它们在使用上的差异。
    取模运算符的一个常见用途是确定一个数是否能被另一个数整除,或者循环结构中限制一个数值的范围等。在这篇文章中,我们将讨论 % 运算符在Java和C语言中的行为,特别是它们在整数与浮点数类型上使用的不同。我们还会深入分析这两种语言在实现和结果上的差异,帮助读者更好地理解它们。
    Java
    在这里插入图片描述

💯C语言中的取模运算符 %

基本行为

在C语言中,取模运算符 % 的主要功能是计算两个整数相除后的余数。具体来说,a % b 表示 a 除以 b 后得到的余数。

示例

#include <stdio.h>

int main() {
    int result = 10 % 3;  // 结果是 1,因为 10 除以 3 商为 3,余数为 1
    printf("10 %% 3 = %d
", result);
    return 0;
}

在这个示例中,10 % 3 的结果是 1,因为 10 除以 3 商为 3,余数为 1。

注意事项

  1. 整数类型限制: C语言的 % 运算符只能用于整数类型。尝试对浮点数进行取模操作会导致编译错误。例如,float a = 5.5 % 2.2; 在C语言中是无效的。

  2. 符号规则: C语言的取模运算符遵循与除法类似的符号规则。如果被除数为负,余数的符号将与被除数相同。也就是说,-10 % 3 的结果是 -1,而不是 2

示例:负数取模

#include <stdio.h>

int main() {
    int result = -10 % 3;  // 结果是 -1
    printf("-10 %% 3 = %d
", result);
    return 0;
}

在这个例子中,-10 % 3 的结果是 -1,因为C语言的取模运算符遵循“余数的符号与被除数相同”的规则。

💯Java中的取模运算符 %

基本行为

Java中的 % 运算符与C语言中的运算符类似,但它不仅适用于整数类型(int, long 等),还可以用于浮点数类型(float, double)。这使得Java在使用 % 运算符时更加灵活,可以处理更多的场景。

示例

public class Main {
    public static void main(String[] args) {
        int result = 10 % 3;  // 结果是 1,因为 10 除以 3 商为 3,余数为 1
        System.out.println("10 % 3 = " + result);
    }
}

在这个Java示例中,10 % 3 的结果是 1,与C语言中的结果一致。

对浮点数的支持

Java特别之处在于它支持浮点数类型(floatdouble)的取模操作。当操作数是浮点数时,% 计算的是浮点数的余数,而不仅仅是整数余数。

示例:浮点数取模

public class Main {
    public static void main(String[] args) {
        double result = 10.5 % 3.2;  // 结果是 1.1
        System.out.println("10.5 % 3.2 = " + result);
    }
}

在这个例子中,10.5 % 3.2 的结果是 1.1。Java通过浮点数余数计算,返回了余数的正确值。

符号规则

与C语言类似,Java中的 % 运算符也会根据被除数的符号来决定余数的符号。重要的一点是,在Java中,% 运算符的结果是保持余数的符号与除数一致,而不是与被除数一致。

示例:负数取模

public class Main {
    public static void main(String[] args) {
        int result = -10 % 3;  // 结果是 -1,因为 Java 取模规则
        System.out.println("-10 % 3 = " + result);
    }
}

在这个Java示例中,-10 % 3 的结果是 -1,与C语言的符号规则相似。

💯C语言与Java中的 % 运算符的对比

1. 支持的数据类型

  • C语言% 运算符只支持整数类型(如 int, short, long 等)。尝试对浮点数使用 % 运算符会导致编译错误。

  • Java% 运算符既支持整数类型(如 int, long 等),也支持浮点数类型(如 float, double)。因此,Java的 % 运算符更加灵活,能够处理更多的数据类型。

2. 负数余数的符号规则

  • C语言:当被除数为负数时,余数的符号与被除数相同。例如,-10 % 3 的结果是 -1

  • Java:Java与C语言类似,当被除数为负数时,余数的符号与被除数相同。例如,-10 % 3 的结果是 -1

3. 浮点数支持

  • C语言:不支持浮点数取模。% 运算符只适用于整数类型。

  • Java:支持浮点数取模。对于浮点数,Java计算的是浮点数余数,而不仅仅是整数余数。这使得Java在处理更复杂的数学运算时更加灵活。

4. 除法和取模的关系

取模运算与除法密切相关。对于整数来说,除法和取模运算是成对出现的,且除法结果和取模结果可以一起用于构建更复杂的数学运算。

  • C语言与Java:在这两种语言中,除法和取模的行为基本一致。a % b 给出的是 a 除以 b 后的余数,而 a / b 给出的是商(向零取整)。

💯小结

通过对比C语言和Java中的 % 运算符,我们可以看到它们在使用上的一些关键差异。C语言的取模运算符只能用于整数类型,并且不支持浮点数取模。而Java的取模运算符则更为灵活,不仅支持整数类型,还支持浮点数类型。虽然两者在负数余数符号规则上的处理相似,但Java提供了更多的操作选项,使得开发者在不同场景下能够更方便地使用 % 运算符。

对于开发者来说,理解这两种语言在取模运算符使用上的差异非常重要,尤其是在需要处理浮点数时,Java无疑提供了更多的灵活性和方便。因此,在实际编程中,正确理解和选择适合的语言特性对于编写高效、准确的程序至关重要。


在这里插入图片描述


在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2304059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix 7.2实操指南:基于OpenEuler系统安装Zabbix 7.2

原文出处&#xff1a;乐维社区 部署环境 openEuler 22.03 LTS PHP 8.0 Apache Mysql 8.0 MySQL数据库 6.0 以上版本需要安装mysql8.0以上版本的数据库&#xff08;以mysql为例子&#xff09;。 欧拉系统自带 mysql8.0 的源&#xff0c;无需要安装额外的源。 安装mysql …

Win11 24h2 不能正常使用ensp的问题(已解决)

因为Win11 24h2的内核大小更改&#xff0c;目前virtualbox在7.1.4中更新解决了。所以Win11 24H2系统版本无法使用 5.x.xx的virtualbox版本&#xff0c;virtualbox对于这个5.x.xx版本早已停止维护&#xff0c;所以这个以后不会有调整。 对应的报错代码是 virtualbox错误代码&…

蓝桥杯——按键

一&#xff1a;按键得原理图 二&#xff1a;按键的代码配置 step1 按键原理图对应引脚配置为输入状态 step2 在GPIO中将对应引脚设置为上拉模式 step3 在fun.c中写按键扫描函数 写完后的扫描函数需放在主函数中不断扫描 扫描函数主要通过两个定义变量的值来判断&#xf…

Linux环境基础开发工具的使用(三)

五、Linux项目自动化构建工具-make/Makefile make&#xff1a;是一条指令。 makefile&#xff1a;是一个当前目录下的文件。 第一行&#xff1a;依赖关系。 第二行&#xff1a;依赖方法。 clean是空依赖关系。 编译文件清理 背景 会不会写makefile&#xff0c;从一个侧面说…

electron提升软件运行权限,以管理员权限运行

大家有任何想法&#xff0c;都可以联系博主沟通。 本系列为实战文章&#xff0c;最终实现的桌面工具软件&#xff0c;获取方式&#xff1a;百度网盘地址&#xff1a;https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…

安科瑞能源物联网平台助力企业实现绿色低碳转型

安科瑞顾强 随着全球能源结构的转型和“双碳”目标的推进&#xff0c;能源管理正朝着智能化、数字化的方向快速发展。安科瑞电气股份有限公司推出的微电网智慧能源管理平台&#xff08;EMS 3.0&#xff09;&#xff0c;正是这一趋势下的创新解决方案。该平台集成了物联网&…

Spring Boot 中使用 @Transactional 注解配置事务管理

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务&#xff1b;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污…

动态链接器(九):.init和.init_array

ELF文件中的.init和.init_array段是程序初始化阶段的重要组成部分&#xff0c;用于在main函数执行前完成必要的初始化操作。 1 .init段和.init_array 段 1.1 作用 .init段包含编译器生成的初始化代码&#xff0c;通常由运行时环境&#xff08;如C标准库的启动例程&#xff0…

RT-Thread+STM32L475VET6——TF 卡文件系统

文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行USB配置1.1 使用外部高速时钟&#xff0c;并修改时钟树1.2 打开SPI1&#xff0c;参数默认即可(SPI根据自己需求调整&#xff09;1.3 打开串口&#xff0c;参数默认1.4 生成工程 2.配置SPI2.1 打开SPI驱动2.2 声明使用SPI…

[论文解析]OmniRe: Omni Urban Scene Reconstruction

OmniRe: Omni Urban Scene Reconstruction 论文地址&#xff1a;https://arxiv.org/abs/2408.16760 代码地址&#xff1a;https://github.com/ziyc/drivestudio 项目地址&#xff1a;https://ziyc.github.io/omnire/ 论文解读 总结 这篇论文代表了一种重建的方向&#xff0…

【微服务优化】ELK日志聚合与查询性能提升实战指南

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

Docker实战-使用docker compose搭建博客

docker run 部署 创建blog网络 [rootk8s-master ~]# docker network create blog 8f533a5a1ec65eae3f98c0ae5a76014a3ab1bf3c087ad952cdc100cc7a658948 [rootk8s-master ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 8f533a5a1ec6 blog bridge …

【JT/T 808协议】808 协议开发笔记 ② ( 终端注册 | 终端注册应答 | 字符编码转换网站 )

文章目录 一、消息头 数据1、消息头拼接2、消息 ID 字段3、消息体属性 字段4、终端手机号 字段5、终端流水号 字段 二、消息体 数据三、校验码计算四、最终计算结果五、终端注册应答1、分解终端应答数据2、终端应答 消息体 数据 六、字符编码转换网站 一、消息头 数据 1、消息头…

51单片机学习之旅——定时器

打开软件 1与其它等于其它&#xff0c;0与其它等于0 1或其它等于1&#xff0c;0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作&#xff0c;高四位保持&#xff0c;低四位清零&#xff0c;高四位定时器1&#xff0c;低四位定时器0 TMODTMOD|0x01;//0x010000 0…

hot100_139. 单词拆分

hot100_139. 单词拆分 思路 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入:…

SQLMesh 系列教程7- 详解 seed 模型

SQLMesh 是一个强大的数据建模和管道管理工具&#xff0c;允许用户通过 SQL 语句定义数据模型并进行版本控制。Seed 模型是 SQLMesh 中的一种特殊模型&#xff0c;主要用于初始化和填充基础数据集。它通常包含静态数据&#xff0c;如参考数据和配置数据&#xff0c;旨在为后续的…

windows11那些事

一.windows11简介 Windows11是‌微软公司于2021年发布的桌面端操作系统&#xff0c;它带来了许多新的功能和改进&#xff0c;旨在提升用户体验和工作效率。以下是一些关于Windows 11的基础知识和使用技巧&#xff1a; ‌‌通用搜索&#xff1a;通过任务栏上的搜索或按Windows…

VividTalk:南京大学、阿里巴巴等机构联合研发的开源3D说话人生成框架

目录 一、前言二、项目概述三、技术架构四、优势特点五、性能评估六、应用场景七、结论与展望 一、前言 在当今人工智能飞速发展的时代&#xff0c;人机交互的方式正不断创新和优化。VividTalk作为南京大学、阿里巴巴、字节跳动和南开大学联合开发的一项开创性技术&#xff0c…

pyside6学习专栏(三):自定义QLabel标签扩展类QLabelEx

标签是界面设计中最常用的控件&#xff0c;本文演示了如何基于PySide6的QLabex控件类扩展定义QLabelEX类&#xff0c;以实现更少的编码完成各种图像、彩色文本、动画的加载和显示&#xff0c;丰富界面显示 本示例演示了QLabel和其扩展类QLabelEx分别显示文本、图像、动画的使用…

后“智驾平权”时代,谁为安全冗余和体验升级“买单”

线控底盘&#xff0c;正在成为新势力争夺下一个技术普及红利的新赛点。 尤其是进入2025年&#xff0c;比亚迪、长安等一线传统自主品牌率先开启高阶智驾的普及战&#xff0c;加上此前已经普及的智能座舱&#xff0c;舱驾智能的「科技平权」进一步加速行业启动「线控底盘」上车窗…