c#笔记-内置类型

news2024/12/23 13:05:52

内置类型

内置类型是一些有关键字表示的类型。关键字具有非常高的优先级,可以让你在没有别的配置的情况下,
只要用的是c#就可以使用。这也意味着这些类型是非常重要,或是基本的东西。

  • 整数:byte, sbyte, short, ushort, int, uint, long, ulong
  • 浮点数:float, double, decimal
  • 布尔:bool
  • 文字:char, string
  • 其他:object, dynamic

整数类型

整数类型一共有8种。他们的区别的所占的字节数,和有没有储存符号。

内容1字节2字节4字节8字节
有符号sbyteshortintlong
无符号byteushortuintulong

以byte为例子。他占1字节,所以有8位。一共能表示2的8次方种情况。所以他一共能表示256个数。
由于最小的是全0的情况,这时候数字就是0。从0开始数256个数,只能数到255。
所以他的计数范围是0到255。

一个字节(byte)有8个比特(bit)。比特和位是同义词。在计算机的语境下,这里的位都是二进制计数。
二进制数数起来像这样:0(0),1(1),10(2),11(3),100(4),101(5),110(6),111(7),1000(8)。
可以看到这里面的每一位数都跟2的次方有联系。

而sbyte也是1字节8比特。区别在于拿出了1位表示符号。他也能表示256个数,但是范围纳入了负数。
他的计数范围是-128到127。

所以,最常用的int类型,32位,有符号,计数范围就是-21亿到21亿。

short意思是短,long的意思是长。他们刚好是int类型的一半和翻倍。
而int是integer的缩写。integer的意思是整数。

浮点数

浮点数的意思是,小数点可以浮动(不固定)。这种计数方式是从科学计数法得到的灵感。
例如120000,可以表示为12*10的4次方。可以说把一个整数12,的小数点向右移动4位数,就得到了120000这个数。
而缺点,科学计数法本身也没有精确计数的意思。浮点数可以表示小数和很大的数,但精确度有限。
比如300万+1/300万,是加不上去的。

浮点数的计数范围计算比较复杂,只列出结果。

关键字中文比特上限精度
float单精度浮点类型323.4E+38223
double双精度浮点类型641.79E+308252
decimal十进制浮点数1287.92E+28296

布尔

乔治·布尔是一位英国数学家,他创立了布尔逻辑,使得不同的逻辑表达式有了一种通用的数学运算方式。
布尔值只有两个值,真(true)和假(false)。这两个值的主要作用就是逻辑计算,也就是用于布尔逻辑。

文字

char类型表示一个字符。在c#中使用utf-16编码储存。每个char只能表示一个字符,不能多也不能少。
string类型表示一堆字符。可以多,也可以一个字符都没有。

其他

object,是c#中所有类型的根源,他作为变量时可以存储任何值。
(但这个类型没有职责,所以他即不能像数字一样运算,也不能像文字一样裁剪)。

dynamic,动态类型。为了可以储存所有值,他也是使用object储存值。但他会让编译器尝试执行你代码中的职责。

object o = 12;
dynamic d = 12;
int i = 12;

Console.WriteLine(o + 12);//objcet类型没有数学运算的职责,编译器会对这个要求报错
Console.WriteLine(d + 12);//编译器不会检查动态类型的职责。但如果运行时确实无法履行这个职责,则报错
Console.WriteLine(i + 12);//正规的数字类型,他可以进行数学运算

字面量

字面量是源代码中用来直接表达固定值的一种表示法,它与一般的变量不同,不需要进行构造。

整数的字面量

自动类型

通常情况下,整数的字面量都是int类型。
但是,如果超出int的范围,会逐步变为long,ulong类型。
如果再超出则会报错。

var i1 = 100;//int
var i2 = 10000000000000000;//long
var i3 = 10000000000000000000;//ulong
var i4 = 100000000000000000000000000000000000000;//报错

如果你没有按照前章节的操作打开类型提示,可以将鼠标悬浮在变量名上查看类型。
在这里插入图片描述

强制类型

在数字的后面可以加后缀,使得强制变为某种类型

  • u:uint或ulong,基于当前常量的大小
  • l:long
  • ul:强制为ulong类型

后缀的大小写不限,但为了和数字1区分开,在使用long后缀时通常使用大写。
后缀的顺序不限,虽然只有ul会有顺序。

var i5 = 100u;//uint
var i6 = 10000000000000000u;//ulong
var i7 = 100L;//long
var i8 = 10000uL;//ulong

2进制和16进制

在数字的开头加上0b,可以让这个数字以2进制的方式构造字面量。
在数字的开头加上0x,可以让这个数字以16进制的方式构造字面量。

var i9 = 0b10000;
var i10 = 0x1a;
Console.WriteLine(i9);//16
Console.WriteLine(i10);//26

分隔

为了防止数字过大的时候数不清,可以添加下划线来作为分割符。
下划线可以随意使用,不限位数,也能连续使用。但是必须用在数字的之间,不能在开头和结尾。

var i11 = 1_000_000;
var i12 = 100_000;
var i13 = 1_0__0___0_____0______0;

浮点数的字面量

强制类型

浮点数字面量始终是double类型。
可以在后面加上f改为float类型,或是在后面加上m改为decimal类型。
但是如果用的就是整数字面量,也可以加上d来改为double类型。

var f1 = 12f;
var f2 = 12.0f;
var d1 = 12d;
var d2 = 12.0;
var m1 = 12m;
var m2 = 12.0m;

省略整数部分

浮点数需要带上小数点,或是后缀才能视为浮点数。
小数点后面必须有至少一个数字,可以是全0。但小数点前面的数字是可以省略的。

var d3 = 0.0;
var d4 = .0;

科学计数法

浮点数可以使用字母e的科学计数法表示数。
但不像科学计数法要求前面的值在1到10之前。

var d5 = 1e4;//10000
var d6 = 12e-2;//0.12
var d7 = 0e9;//0

分隔

和整数一样可以使用下划线分隔。但是如果有小数点,分隔不能出现在小书点前面。

布尔的字面量

布尔值的字面量只有两个,他们都是关键字:true和false。

var b1 = true;
var b2 = false;

文本的字面量

字符的字面量使用一对单引号包围,不能多也不能少。
字符串的字面量使用一对双引号包围,可以任意长,包括没有值。但是字面量不能包含换行。

var c1 = 'a';
var c2 = '好';
var s1 = "";
var s2 = "你好世界";

转义

由于这两种引号都被我们用来表示字面量的范围,因此我们想在文本字面量里表示引号是很困难的。
为了可以表示引号,换行等一系列特殊字符,需要使用转义。
转义使用反斜杠\(退格键和回车键附近)开始,他跟接下来的特定组合会合并为一个字符。

例如表示引号,反斜杠自身,都是在反斜杠后加上他们自身。

var c3 = '\'';//会输出'
var s3 = "\"\\";//会输出"\

而其他的常见组合有

  • \n:换行
  • \t:水平制表符
  • \uxxxx:直接转义一个unicode编码
var c4 = '\u5238';//输出卷
var s4 = "1\t1\n11\t1\n111\t1\n1111\t1";//水平制表符可以根据以及用的字符数量,自动决定生成多少个空格
Console.WriteLine(s4);

转义组合的字符,会有特殊的颜色。
在这里插入图片描述

原始字符串

有的时候,我们会从其他地方复制东西过来。
从文件路径复制来的文字中,含有大量反斜杠。
从网页源码复制来的文字中,含有大量引号。

为了便于修改,可以使用原始字符串。原始字符串会无视内部的所有转义,以原样生成。
原始字符串使用3个或更多的双引号开头,以相同数量的引号结尾。

Console.WriteLine("""C:\Program Files\dotnet\packs""");
Console.WriteLine("""""用户输入{""""}""""");//如果字符里面的连续引号过多,就增加原始字符串首尾引号数量,直到文本中的引号不会有歧义。

在使用多行原始字符串时,首尾的引号必须单独放置在一行,不能包含内容文字。
首末行不会被记录一个换行。结束引号的前面有多少个空格,文本就会裁剪等量的前导空格。
内容行首不能超过收尾引号。

string s5 = """
	宽度=480px;
	高度=640px;
	""";
Console.WriteLine(s5);

指定类型的变量声明

不一样的类型

使用var创建的变量,总是会识别右侧值的类型。
但有时候,声明的变量类型可能不希望跟值的类型完全一样。
例如,字面量无法生成byte类型的数字。必须使用指定类型声明。

byte b = 12;

分开声明和赋值

使用指定类型声明变量,可以不需要在第一次声明的时候就赋值。
但在第一次使用之前需要赋初始值。

int i;
i = 12;

同时声明

使用指定类型,可以在一条语句里声明多个变量,只需要用逗号隔开变量名。

object o1, o2, o3, o4;

类型转换

隐式自定义类型转换

一些类型之间写了类型转换的方式。例如从char到int。
他们本来没有兼容,但是程序写了从char到int的转换方式,所以可以转换。
而char没有写到string的转换,所以即便他们很像也不能把char值赋值给string变量。

int i14 = 'a';//会得到这个字符的编码
string s7 = 'a';//报错

字符的储存是列一张表。规定数字1对应字符a,数字2对应字符b这样子。
这张表就叫字符集。把char值赋值给int变量会得到他的编码。
char类型是utf-16编码储存,也就是说是一个无符号16比特数据,跟ushort一样。

显式自定义类型转换

有些不兼容的类型,写了显示转换。
这种转换方式需要多一个步骤,在前面用括号写上目标类型。
这个作用是告诉你,结果可能不是你想要的,小心点。

double d8 = 6.8;
int i15 = (int)d8;//会得到6。小数不会四舍五入,而是完全舍去。

所有隐式转换都可以以显示转换的方式写。有效,但没意义。

基于继承的类型转换

一个类型继承另一个类型时,会获得他的全部职责。那么,就可以当作那个类型使用。
(香蕉类型继承自水果类型。水果能干什么香蕉就能干什么)
所以作为所有类型的基类object,没有设置过多的职责。

object o5 = 12;

继承关系是真正的类型兼容,自定义转换不能指定有继承关系类型的转换。

基于派生的类型转换

int继承自object,所以一个object值有可能是int值。
这种转换同样要在前面加括号写上目标类型,说明可能出错。

object o5 = 12;
int i16 = (int)o5;//o5确实是int类型。
string s7 = (string)o5;//o5不是string类型,int也没有对string的兼容。会出错。

工厂设计模式创造值

工厂模式是说根据配置的不同,创造出不同的值。
屏幕识图根据图片(配置)识别出文字(创造值)就是一种工厂模式。
类似的,把文字转化为数字,也可以使用工厂方法。

所有数字类型都有一个Parse方法,接收一个字符串,来构造一个数字。

int i17 = int.Parse("60");
double d9 = double.Parse("2.5");
Console.WriteLine(i17*d9);

用于识别的字符串必须是有效的数字,例如有不是数字的东西(开头表示正负的+-除外),
或者整数类型去识别一个小数,或者识别了超出自己范围的数字都会出错。

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

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

相关文章

【Python入门】搭建开发环境-安装Pycharm开发工具

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…

【数据结构】线性表之单链表(讲解实现——带动图理解)

文章目录 单链表单链表主体结构单链表操作函数介绍单链表操作函数实现单链表的初始化:打印函数单链表插入函数:头插尾插指定结点后插入和查找函数单链表结点之前插入数据 单链表删除函数头删尾删指定结点后删除指定结点删除 销毁单链表 文件分类test.cLi…

【STM32】基础知识 第十课 CubeMx

【STM32】基础知识 第十课 CubeMx STM32 CubeMX 简介安装 JAVACubeMX 安装新建 STM32 CubeMX 工程步骤新建工程时钟模块配置GPIO 配置生成源码 main.c STM32 CubeMX 简介 CubeMX (全称 STM32CubeMX) 是 ST 公司推出的一款用于 STM32 微控制器配置的图形化工具. 它能帮助开发者…

「Bug」解决办法:Could not switchto this profil,无法使用节点的解决方法,彻底解决

♥️作者:白日参商 🤵‍♂️个人主页:白日参商主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

二十五、OSPF高级技术——开销值、虚链路、邻居建立、LSA、静默接口

文章目录 调试指令(三张表)1、邻居表:dis ospf peer brief2、拓扑表(链路状态数据库):dis ospf lsdb3、路由表:dis ip routing-table 一、OSPF 开销值/度量值(cost)1、co…

Python基础合集 练习15(内置函数 匿名函数)

匿名函数 以lambda开头表示这是匿名函数,之后的x,y是函数参数 def sub(a,b): return a-b print(sub(10,3)) print(lambda x,y:x-y) sublambda x,y:x-y print(sub(8,4)) def game(math,chinese,english): “”" 功能:计算三科的成绩 math&#xf…

谈谈多线程的上线文切换

大家好,我是易安! 我们知道,在并发程序中,并不是启动更多的线程就能让程序最大限度地并发执行。线程数量设置太小,会导致程序不能充分地利用系统资源;线程数量设置太大,又可能带来资源的过度竞争…

【C++】隐式转换与explicit关键字、运算符及其重载、this关键字

C隐式转换与explicit关键字 隐式构造函数 隐含的意思是不会明确告诉你要做什么 隐式转换 C允许编译器对代码执行一次隐式转换&#xff0c;而不需要使用casr强制转换 例1 #include <iostream> #include <string>class Entity { private:std::string m_Name;in…

13 SQL——数值函数

1 ceil() 数值向上取整&#xff08;前提是小数位不是0&#xff09; select ceil(1.2);2 floor() 数值向下取整&#xff08;前提是小数位不是0&#xff09;select floor(1.8);3 mod() 取&#xff08;x%y&#xff09;的模运算&#xff08;求余数运算&#xff09; select …

10. hr 综合面试题汇总

10. hr 综合面试题汇总 C++软件与嵌入式软件面经解析大全(蒋豆芽的秋招打怪之旅) 本章讲解知识点 1.1 HR心理复盘1.2 HR常问问题——学校的表现怎么样啊?1.3 HR常问问题——了解我们公司吗?1.4 HR常问问题——个人情况1.5 HR常问问题——业余生活1.6 HR常问问题——薪资待…

【源码角度】为什么AQS这样设计

AQS&#xff08;AbstractQueuedSynchronizer&#xff0c;抽象同步队列器&#xff09;是 一个基于 FIFO的双端队列。它分为独占模式和共享模式&#xff0c;本文主要围绕独占模式进行讲解&#xff0c;共享模式的原理和独占模式相似&#xff0c;最后会提一嘴。 场景代入 其实AQS模…

云计算基础(持续更新)

文章目录 云计算云计算的定义第1关&#xff1a;云计算定义第2关&#xff1a;云计算的基本原理 云计算出现的背景第1关&#xff1a;云计算出现的背景第2关&#xff1a;云计算的特征第3关&#xff1a;云计算的优势与劣势 虚拟化的类型第1关&#xff1a;虚拟化的定义第2关&#xf…

第六章结构型模式—代理模式

文章目录 代理模式解决的问题概念结构 静态代理动态代理织入的概念JDK 动态代理JDK 动态代理分析 CGLIB 动态代理 三种代理的对比JDK 和 CGLIB 的区别动态代理和静态代理的对比代理模式的优缺点使用场景 结构型模式描述如何将类或对象按某种布局组成更大的结构&#xff0c;有以…

浅谈springboot启动过程

1. 知识回顾 为了后文方便&#xff0c;我们先来回顾一下spring的一些核心概念。 spring最核心的功能无非是ioc容器&#xff0c;这个容器里管理着各种bean。ioc容器反映在java类上就是spring的核心类ApplicationContext。ApplicationContext有众多的子接口和子类&#xff0c;不…

SAP重复制造入门到放弃系列之基本配置

目录 前言 主要配置清单&#xff1a; REM参数文件&#xff1a; 计划订单计划参数文件 维护输入项参数 维护行选择 确认和物流信息系统全局设置 定义确认处理 操作方法表 其他 前言 重复制造中的配置步骤包括创建重复制造配置文件、为运行计划数量&#xff08;计划订单&a…

Excel技能之打印,19+技巧超省纸

颜色太多&#xff0c;重新打印。 没有边框&#xff0c;重新打印。 少了几列&#xff0c;重新打印。 整个工作表打印出来&#xff0c;拿剪刀把自己需要的数据剪下来&#xff0c;用胶水贴到另一张新的A4纸。 你上班打印资料&#xff0c;浪费了多少纸&#xff0c;认真算一下&…

PyCharm with Remote Interpreters

文章目录 一: 利用 Docker 镜像搭建1.编写 Dockerfile2.构建并配置 Remote Interpreters3.结论0.FAQ 二: 利用 SSH Docker 镜像搭建1.编写 Dockerfile2.构建并运行3.构建镜像4.运行容器5.验证并配置0.FAQ 起因是需要在 M2 芯片的 Mac 上调试基于 Python3.6.1 构建的程序. 而 M…

每天一道算法练习题--Day18 第一章 --算法专题 --- ----------前缀树

前缀树 字典树也叫前缀树、Trie。它本身就是一个树型结构&#xff0c;也就是一颗多叉树&#xff0c;学过树的朋友应该非常容易理解&#xff0c;它的核心操作是插入&#xff0c;查找。删除很少使用&#xff0c;因此这个讲义不包含删除操作。 截止目前&#xff08;2020-02-04&a…

bootloader编写——MCU固件升级系列2(STM32)

本系列将从升级流程、boot代码编写、APP代码编写以及固件打包来介绍&#xff0c;硬件选用STM32F407ZGT6&#xff08;手里只有&#xff09;&#xff0c;来完成这系列教程。 前言 开发STM32固件升级并编写Bootloader时&#xff0c;需要注意以下几个关键点&#xff1a; 熟悉硬件和…

数据结构篇四:栈

文章目录 前言1.栈1.1 栈的概念及结构1.2 栈的实现 2.栈功能的解析及实现2.1 栈的创建2.2 初始化2.3 入栈2.4 出栈2.5 检查栈是否为空2.6 获取栈顶元素2.7 栈中的有效元素个数2.8 销毁 3.代码实现3.1 Stack.h3.2 Stack.c3.3 test.c 4.总结 前言 前面学习的一些结构都比较普通&a…