数据类型的划分
值类型(13种)
值存储在堆栈中 存储空间小 调用速度快
a. 值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。
b. 值类型直接存储其值
c. 值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中
d. 值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。栈的内存是自动释放的。
e. 值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体。
f. C#的值类型包括:结构体(数值类型、bool 型、用户定义的结构体),枚举,可空类型
布尔型
bool类型:true/false 1/0 默认取值:false
整数型
位:代表取值范围2的多少次方
有无符号:代表是否可以取得负数
无符号代表不包括负数
0是最小的正整数
-1是最大的负整数
byte/sbyte: 8位 2^8=256
byte:无符号,从0取到255
sbyte:有符号,从-128取到127
short/ushort:16位
int/uint:36位
int:有符号,-2,147,483,648到2,147,483,647
long/ulong:64位
小数型
decimal:128位精度型
double:64位双精度
float:32位单精度
字符型
char:16位Unicode字符
引用类型(2种)
string object
值存储在堆中 存储空间大 调用速度
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。继承自 System.Object 类。
用户自定义引用类型有:class、数组、interface 或delegate
命名空间
命名空间>类>对象
命名空间:using System;
变量
一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。范围内的值可以存储在内存中,可以对变量进行一系列操作。
变量的声明
C#中变量定义的语法
<data_type> <variable_list>;
data_type:必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。
variable_list:可以由一个或多个用逗号分隔的标识符名称组成
int a,b,c;
变量的初始化
变量通过在等号后跟一个常量表达式进行初始化(赋值)。
变量初始化是 C#强调安全性的另一种方式。简单的说,C#编译器需要用某个初始值对变量进行初始化,之后才能在操作中引用该变量。大多数现代编译器把未初始化标记为警告,但 C#编译器把它当作错误来看待。
计算机存储数据
整数在计算机中存储是以补码的方式存储的
不同进制的组成和输出
二进制:以 0b 开头,由 0 和 1 组成
八进制:以 0 开头,由 0-7 组。(C#中没有现成的表示方式)
十进制:默认就是十进制,由 0-9 组成
十六进制:以 0x 开头,由 0-9+A-F 组成
进制之间的转换算法
其他进制转十进制
口诀:将所有的位上面的值*进制数的次方连起来既可以得到十进制
进制数:本身是多少进制,进制数就是多少
次方:从右向左,从 0 开始编号,对应位上面的编号就是改位的次方
十进制转其他进制
除以要转换的进制数,直至商为 0,余数反转
将 x 进制转成 y 进制快速转换法
利用 8421 码(将每个二进制对应的位上计算一个固定的十进制数)
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
二进制 2 位数组合
八进制 3 位数组合
十六进制 4 位数组合
例如:
将二进制 0b100100 转成 8 进制
0b 100 100=>100 100=>4 4=44
将二进制 0b 10 0100 转成 16 进制
0b 10 0100=>10 0100=>2 4=24
以十进制为桥梁
x 进制>十进制>y 进制
原码
将一个整数转换成二进制,然后最高位用来表示符号位(0表示正数,1 表示负数,其余位表示数值位)
例如:
7:0000 0111
-7:1000 0111
反码
正数的反码和原码一致,负数的反码位数全部取反,除最高位
补码
正数的补码和原码一致,负数的补码在反码的基础上末尾+1
符号位 | 原码 | 反码 | 补码 | |
---|---|---|---|---|
+7 | 0 | 0000111 | 0000111 | 0000111 |
-7 | 1 | 0000111 | 1111000 | 1111001 |
十进制负整数转二进制算法
将十进制输转化成二进制数,不管符号。
对转化的二进制数逐位取反
对取反后的二进制数加 1,结果就是十进制负数转化成的二进制数。
例如:
-5 转化成二进制数
(十进制)5=(二进制)0000 0101
(二进制)0010 0000 逐位取反为:1111 1010
二进制数+1 得:1111 1011
二进制负数转十进制算法
对二进制数逐位取反
对取反后的二进制数加 1,加上负号,结果就是二进制负数转化成的十进制数。
(-5)1111 1011 转化成二进制数
(二进制)1111 1011 逐位取反为:0000 0100
二进制数+1 得:0000101,加上负号;
结果为-5;