C#入门学习记录(四)C#运算符详解:掌握算术与条件运算符的必备技巧+字符串拼接

一、运算符概述

        运算符是程序进行数学运算、逻辑判断的核心工具,C#中的运算符分为:

算术运算符 → 数学计算(+ - * / %)
条件运算符 → 三目判断(?:)
关系运算符 → 比较大小(> < ==)
逻辑运算符 → 逻辑判断(&& || !)
赋值运算符 → 赋值操作(= +=)

二、算术运算符深度解析

1. 基础运算符

int a = 10 + 5;    // 15(加法)
int b = 20 - 3;    // 17(减法)
int c = 6 * 7;     // 42(乘法)
double d = 22.0 / 7; // 3.1428...(精确除法)
int e = 22 / 7;    // 3(整数截断)
int f = 25 % 7;    // 4(余数计算)

2. 特殊运算符技巧

// 自增自减(前缀/后缀差异)
int x = 5;
Console.WriteLine(x++); // 输出5,后变为6
Console.WriteLine(++x); // 变为7,后输出7// 复合赋值
int y = 10;
y += 3;  // 等价于 y = y + 3 → 13

3. 浮点运算陷阱

double val = 10 / 3;     // 错误!结果为3.0(整数运算后转double)
double correctVal = 10.0 / 3; // 正确:3.333...

三、条件运算符?: 的三层境界

1. 基础用法

如果为?:问号前面的条件为true,则去:左边的值反之为右边的

int max = (a > b) ? a : b; // 取较大值
string msg = (score >= 60) ? "合格" : "不合格";

2. 嵌套使用(需谨慎)

// 判断数字正负性
string sign = (num > 0) ? "正数" : (num < 0) ? "负数" : "零";

等价于:

string sign;
if (num > 0) 
{sign = "正数";
}
else 
{if (num < 0) {sign = "负数";}else {sign = "零";}
}

 

3. 与null合并符结合

这个和上篇文章介绍的一样,就是一个判空的作用

string name = inputName ?? "匿名用户"; // 相当于:
// string name = (inputName != null) ? inputName : "匿名";

四、其他运算符速查表

关系运算符(Comparison Operators)​

        用于比较两个值的大小关系,返回bool类型结果。

运算符说明示例代码结果(假设a=5b=3
>大于bool c = a > b;true
<小于bool c = 2 < 1;false
>=大于等于bool c = a >= 5;true
<=小于等于if (b <= 3) { ... }条件成立
==等于if (a == 5) { ... }执行代码块
!=不等于string s = (name != null) ? name : "";非空校验

逻辑运算符(Logical Operators)​

用于组合或反转布尔逻辑,常用于条件判断。

逻辑与又称为短路运算

运算符说明示例代码结果(假设x=truey=false
&&逻辑与bool c = x && y;false
||逻辑或`有成立就成立
!逻辑非bool c = !y;true

位运算符(Bitwise Operators)​

直接对整数的二进制位进行操作,常用于标志位、掩码运算。

运算符说明示例代码二进制运算过程(以a=0b1010b=0b1100为例)
&按位与int c = a & b;1010 & 1100 → 1000(十进制8)
||按位或|flags = flags
^按位异或int c = a ^ b;1010 ^ 1100 → 0110(十进制6)
~按位取反int c = ~a;~0b1010 → 1111 0101(补码表示)
<<左移int c = 1 << 3;0b0001 → 0b1000(十进制8)
>>右移int c = 8 >> 2;0b1000 → 0b0010(十进制2)

        注意事项:

  1. 位运算 vs 逻辑运算

    • 位运算符(&|)操作的是整数的二进制位
    • 逻辑运算符(&&||)操作的是布尔值
  2. 位移运算溢出
int x = 1 << 31; // 对于32位int,结果为-2147483648(溢出)

五、避坑指南

  1. 整数除法陷阱:10/4=2,需显式转换为浮点
  2. 运算符优先级x = 5 + 3 * 2; → 11,而非16
  3. 浮点精度问题:避免用==直接比较浮点数
  4. 自增时序:循环中使用i++与++i可能影响结果

六、字符串拼接相关

一、基础拼接方法

1. + 运算符(最常用)
string name = "Alice";
int age = 28;// 简单拼接
string info1 = "姓名:" + name + ",年龄:" + age; // 混合类型自动转换
Console.WriteLine("ID:" + 1001 + " Score:" + 95.5); 
2. String.Concat 方法
// 多参数拼接
string fullName = String.Concat("张", "三", "丰"); // 数组合并
string[] colors = {"Red", "Green", "Blue"};
string colorStr = String.Concat(colors); // "RedGreenBlue"

二、进阶拼接方案

1. 字符串插值
// 使用$符号
string message = $"当前时间:{DateTime.Now:HH:mm:ss}";// 支持表达式
double price = 19.99;
string display = $"折后价:{price * 0.8:C2}"; // ¥15.99
2. String.Format(格式化控制)
// 定位参数
string template = "CPU温度:{0}℃,内存使用:{1}%";
string status = String.Format(template, 65.3, 78);// 格式规范
string hex = String.Format("0x{0:X4}", 255); // 0x00FF
3. StringBuilder(高频操作必备)

这块我们后面会再次遇到的!

using System.Text;StringBuilder sb = new StringBuilder(1024); // 预分配容量
for(int i=0; i<100; i++){sb.Append(i).Append(" ");
}// 最终转换为字符串
string result = sb.ToString(); 

三、特殊场景处理

1. 集合拼接:String.Join
List<string> files = new List<string>{"file1.log", "file2.dat"};
// 带分隔符的拼接
string path = String.Join("; ", files); // 数值类型转换
int[] numbers = {1,2,3};
string nums = String.Join(",", numbers); // "1,2,3"
2. 多行文本:Verbatim字符串

这个是SQL,C#通过字符串拼接生成的SQL查询命令。等用到的时候再去查询就是

string sql = $@"SELECT *
FROM Users
WHERE Age > {minAge} AND City = '{city}'";
3. 条件拼接
string welcome = "欢迎" + (isVIP ? "尊贵的VIP用户" : "用户");

注意:

  1. 字符串不可变性 每次拼接都会创建新字符串对象,原对象成为垃圾(不过C#自己有垃圾回收机制GC不用自己手动释放)

  2. 内存碎片问题 大量小字符串拼接会导致内存碎片

  3. 预分配机制 StringBuilder通过char数组减少扩容次数

附录:

C#中常用的格式说明符(Format Specifiers)​及其用法的详细分类表格:

一、数字格式说明符

格式符名称描述示例输入(值=1234.56)输出示例(默认区域)适用类型
CCurrency货币格式(带符号)1234.56.ToString("C2")¥1,234.56数值类型
DDecimal整数补零(仅整数)123.ToString("D6")000123仅整数类型
EExponential科学计数法1234.56.ToString("E2")1.23E+003浮点数/双精度
FFixed Point定点数(指定小数位)1234.56.ToString("F1")1234.6数值类型
GGeneral自动选择最紧凑格式1234.5.ToString("G")1234.5所有数值类型
NNumber带千位分隔符1234.56.ToString("N0")1,235数值类型
PPercent百分比格式0.123.ToString("P1")12.3%数值类型
XHexadecimal十六进制(大小写敏感)255.ToString("X4")00FF仅整数类型

二、日期时间格式说明符

格式符示例输出(日期=2023-10-5 14:30:00)描述
d2023/10/5短日期格式
D2023年10月5日长日期格式
t14:30短时间格式
T14:30:00长时间格式
f2023年10月5日 14:30长日期+短时间(组合)
F2023年10月5日 14:30:00完整日期时间
g2023/10/5 14:30通用短格式
G2023/10/5 14:30:00通用长格式
m10月5日月日格式
y2023年10月年月格式
s2023-10-05T14:30:00ISO 8601 可排序格式

三、自定义格式符

符号作用示例(值=1234.5)输出结果
0强制数字占位符1234.5.ToString("00000.00")01234.50
#可选数字占位符1234.5.ToString("#####.##")1234.5
.小数点1234.ToString("0.000")1234.000
,千位分隔符/比例缩放1234567.ToString("#,#")1,234,567
%百分比乘数(自动×100)0.123.ToString("0.0%")12.3%
;分节符(正数/负数/零格式)1234.5.ToString("+0.0;-0.0;零")+1234.5

完整格式说明符文档可参考微软官方文档:

标准数字格式字符串 - .NET | Microsoft Learn

自定义数字格式字符串 - .NET | Microsoft Learn

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

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

相关文章

Linux中安装Git

安装Git 安装git&#xff0c;我们可以使用yum指令在线安装&#xff0c;这里&#xff0c;我们先对yum做一个简单介绍。 执行下面命令 #查看可用的git安装包 yum list git #安装git yum install -y git 查看git安装包 安装git 验证是否安装成功 安装完毕之后&#xff0c;我们…

开源免费一句话生成儿童故事视频核心思想解析

再看一个演示视频&#xff0c;学会核心思想后&#xff0c;可以打造自己的内容生成工具&#xff0c;后文有基于飞书多维表格的实现效果&#xff1a; 一句话灵感生成儿童故事视频演示 这是一款专门为内容素材创作打造的创新工具&#xff0c;可根据用户输入的主题&#xff0c;快速…

Linux上的`i2c-tools`工具集的详细介绍;并利用它操作IMX6ULL的I2C控制器进而控制芯片AP3216C读取光照值和距离值

IC-Tools 工具集介绍 i2c-tools 是 Linux 下用于 IC 设备调试 的用户空间工具集(你也可以把它看成是一个库&#xff0c;类似于之前自己用过的触摸屏库tslib库、FreeType矢量字符库)&#xff0c;它提供了一系列命令行工具&#xff0c;可以扫描、读取、写入 IC 设备&#xff0c;…

Windows 部署 RuoYi 前后端分离项目

目录 ruoyi-vue部署 ruoyi源码类型 若依官方地址 RuoYi-Vue 前后端分离版 环境 工具 windows开发环境 jdk安装 (安装位置默认) 双击点击安装 步骤 耐心等待加载完毕&#xff0c;路径默认 等待安装完成即可 快速打开文件资源管理器 进入高级系统设置 系统属性&#…

《C语言中的ASCII码表:解锁字符与数字的桥梁》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、什么是ASCII码表&#xff1f;二、ASCII码表的结构1. 控制字符&#xff08;0-31 和 127&#xff09;2. 可打印字符&#xff08;32-126&#xff09; 三、完…

Git删除并重新推送远程分支操作

在 Git 中&#xff0c;如果你删除了远程分支并希望重新推送一个新的远程分支&#xff0c;可以按照以下步骤操作&#xff1a; 1. 删除远程分支 首先&#xff0c;删除远程分支&#xff1a; git push origin --delete <branch-name>其中&#xff0c; 是你要删除的远程分支…

连接不上雷电模拟器,adb连接不上问题的解决办法

win7升win10后&#xff0c;adb shell连接不上&#xff0c;找不到指定文件&#xff0c;具体如下 f:\AndroidTool_Release_v2.35\bin>adb shell * daemon not running; starting now at tcp:5037 adb: CreateFileW nul failed: 系统找不到指定的文件。 (2) * failed to start…

el-table 插槽踩过的坑 :slot-scope 和#default的区别

slot-scope和#default是Vue中用于定义插槽的两种不同语法&#xff0c;它们在Vue 2和Vue 3中有不同的应用场景和语法规则。‌ slot-scope 在‌Vue 2.x‌中&#xff0c;slot-scope是用于声明具名插槽并获取父组件传递过来的数据的主要方式。通过slot-scope可以定义一个变量scop…

一、初始 Linux

文章目录 一、操作系统概述二、Linux 初识1. Linux 的组成2. Linux 发行版 三、远程链接 Linux 系统1. 四、WSL (windows subsystem for linux)1. 什么是 WSL2. 如何下载 WSL3. 安装不同的 Linux 发行版4. 启动停止使用指定发行版5. 卸载与备份6. 文件共享7. 命令混用8. 用 vsc…

力扣128. 最长连续序列 || 452. 用最少数量的箭引爆气球

最长连续列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 解释&…

Python教学:lambda表达式的应用-由DeepSeek产生

Python 中的 ‌lambda 表达式‌是一种简洁的匿名函数&#xff0c;适合快速定义简单逻辑的函数。它常用于需要函数作为参数的场景&#xff0c;如高阶函数、排序、过滤等。以下是 lambda 的典型应用场景及示例&#xff1a; 1. ‌基本语法‌ lambda 参数1, 参数2, ... : 表达式 特…

3D标定中的平面约束-平面方程的几何意义

平面方程的一般形式为 AxByCzD0&#xff0c;其中系数 A、B、C、D共同决定了平面的几何特性。 系数对平面姿态的影响 1. 法向量方向2. 平面位置3. 比例关系4. 姿态变换5.平面空间变换 1. 法向量方向 法向量方向由 A、B、C 决定 核心作用&#xff1a;系数 A、B、C 构成的向量 (…

C/C++蓝桥杯算法真题打卡(Day6)

一、P8615 [蓝桥杯 2014 国 C] 拼接平方数 - 洛谷 方法一&#xff1a;算法代码&#xff08;字符串分割法&#xff09; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便编程 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用…

如何在 GoLand 中设置默认项目文件夹

在使用 GoLand 进行开发时&#xff0c;设置一个默认的项目文件夹可以大大提高工作效率。默认项目文件夹会在你打开或新建项目时自动预选&#xff0c;避免每次都需要手动导航到目标目录。本文将详细介绍如何在 GoLand 中设置默认项目文件夹。 步骤一&#xff1a;打开系统设置 …

DeepSeek私有化部署与安装浏览器插件内网穿透远程访问实战

文章目录 前言1. 本地部署OllamaDeepSeek2. Page Assist浏览器插件安装与配置3. 简单使用演示4. 远程调用大模型5. 安装内网穿透6. 配置固定公网地址 前言 最近&#xff0c;国产AI大模型Deepseek成了网红爆款&#xff0c;大家纷纷想体验它的魅力。但随着热度的攀升&#xff0c…

Docker运行postgreSQL,由于异常启动或者退出后,提示could not locate a valid checkpoint record

pg_resetwal 是 PostgreSQL 的“急救工具”&#xff0c;用于在极端情况下修复因 WAL 或控制文件损坏导致的启动问题。 但需注意&#xff1a; 风险极高&#xff0c;可能导致数据不一致。必须立即转储并恢复&#xff0c;避免直接在修复后的数据库中执行写操作。仅在备份后使用&…

pytorch小记(十):pytorch中torch.tril 和 torch.triu 详解

pytorch小记&#xff08;十&#xff09;&#xff1a;pytorch中torch.tril 和 torch.triu 详解 PyTorch torch.tril 和 torch.triu 详解1. torch.tril&#xff08;计算下三角矩阵&#xff09;&#x1f4cc; 作用&#x1f50d; 语法&#x1f539; 参数&#x1f4cc; 示例&#x1…

Java基础与集合

参考 Java基础知识详解&#xff1a;从面向对象到异常处理-CSDN博客 2024年 Java 面试八股文&#xff08;20w字&#xff09;_java面试八股文-CSDN博客 基础知识 java概述 什么是java&#xff1f; java是一种面向对象的编程语言 java特点 面向对象&#xff08;继承&#…

【R语言】二项分布,正态分布,极大似然估计实现

二项分布 生成二项分布概率 s <- 0:60 prob <- dbinom(s, size 60, prob 1/6)s <- 0:60&#xff1a;生成 0 到 60 之间的整数&#xff0c;表示可能的成功次数。 dbinom(s, size 60, prob 1/6)dbinom(x, size, prob) 计算二项分布的概率质量函数&#xff08;PMF…

【C语言】:学生管理系统(多文件版)

一、文件框架 二、Data data.txt 三、Inc 1. list.h 学生结构体 #ifndef __LIST_H__ #define __LIST_H__#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <time.h>#define MAX_LEN 20// 学生信息…