02_C#变量

变量:

[日积月累]——1-折叠代码:

#region 描述
    //使逻辑更加清晰,避免代码凌乱。
#endregion

编译器提供给用户的预处理指令,它只在编译的时候有用,发布或执行代码的时候,它会被自动忽略。



变量:可以变化的容器。

声明写法:

变量类型 变量名 = 初始值 ;

//同时定义多个变量
int a1 = 1,b1 = 2,c1 = 3,d1 = 4;

变量类型(14种):

有符号的整型变量: 无符号的整型变量:
sbyte int short long byte uint ushort ulong
浮点数: 特殊类型:
float double decimal bool char string
<<变量占有的字节:
Console.WriteLine("不同变量所占字节:");
Console.WriteLine("sbyte  :"+sizeof(sbyte));
Console.WriteLine("int    :"+sizeof(int));
Console.WriteLine("short  :"+sizeof(short));
Console.WriteLine("long   :"+sizeof(long));
Console.WriteLine("float  :"+sizeof(float));
Console.WriteLine("double :"+sizeof(double));
Console.WriteLine("decimal:"+sizeof(decimal));

<<运行结果:

image


变量所占字节决定其储存数字的范围:(已知1个字节占8个二进制位)

0 0 0 0 0 0 0 0
128 64 32 16 8 4 2 1
static void Main(string[] args)
{
//由于二进制数在C#中无法直接表示
//所以所有二进制数都用一个字符串来表示
sbyte i=127;
Console.WriteLine("{0}转化为二进制为:{1}",i,Convert.ToString(i,2));

}

short类型占有2个字节,储存数字范围是2的16次方,结果为65536;
int类型占有4个字节,储存数字范围就是2的32次方,结果为4,294,967,296。

image

当值为-128时:

image

image


<<负数的储存模式:
在计算机中,负数以补码形式存储(所有的数都是以补码的形式存储);
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码
反码:将二进制数按位取反(负数的符号位不变),所得的新二进制数称为原二进制数的反码。
补码:反码加1称为补码。

正数的原码,反码,补码相同。

规定最高位  符号位  正数为0,负数为1。

image

原因:

普通电脑硬件没有减法器,只有加法器,所以在进行类似7-3运算的时候,要将其转化为7+(-3)的形式,这就需要我们得到负数的补码。

-3的 原码:1000 0011

​ 取反:1111 1100(反码,符号位不变)

​ 加一:1111 1101(补码,反码的基础上加一)

加法代替减法:

​ 0000 0111

​ +1111 1101

​ ——————

​ 1 0000 0100

高位溢出部分舍去得到 0000 0100 。

通过这种代换的方法将减法转化为加法进行运算,解决电脑没有减法器的问题。


<<部分正负数的存储格式

以补码的形式存储:(sbyte为例<-128-127>)

正数:

0000 0000 0

0000 0001 1

... ...

0111 1111 127

负数:

1000 0000 -128

1000 0001 -127

1000 0010 -126

... ...

1111 1111 -1


<<无符号整数:

无符号整数就是将原来对应的有符号整数类型的负数部分去掉,在正数部分的后面添加同等数量的正数。

例如:

sbyte -127——128

byte 0——255

 static void Main(string[] args)
 {
   byte i=128;
   Console.WriteLine("{0}转化为二进制为:{1}",i,Convert.ToString(i,2));

 }

结果:

image

多试几个:

image

image

由结果可以看出,在无符号数中,二进制的最高位不再代表符号位,而是一个普通的二进制位。


image

posted @ 2022-03-21 23:30  猪无名  阅读(57)  评论(0编辑  收藏  举报