c#入门-整数类型

int是指Integer(整数)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
32位有符号整数种,最高位用于存放符号,那么存放数据的bit有31个
那么int类型最大可以表示231-1即2147483647

注意,在程序中计数最小值是所有bit全0的状态,也就是最小是0(无符号情况下)
最大值是1+2+22+23+24+25+…+2n-1=2n-1
后续内容中也请注意,出现计数内容都是从0开始计数

对于每一个数值类型,都可以.MaxValue获取最大精准值,用.MinValue获取最小精准值

Console.WriteLine(int.MaxValue);
Console.WriteLine(int.MinValue);

备注

2,8,16进制数

声明一个2进制数的方式是在数前面加0b
8是加0,16是加0x

			double b=0xa6;
			Console.WriteLine(b);

无符号整型

数值类型的最高位用于储存符号,所以用来记非负数就浪费了一位
为此,可以了解一下不储存符号的整型
ushort
uint
ulong
他们和原版的区别在于前面加了u(unsigned无符号)

byte原本就是无符号的,他的变体是sbyte(s是unsigned,符号)
写一个无符号的数值的方式是在后面加个u
在这里插入图片描述
数值也有类型,虽然你可以直接用12给uint赋值

各类型数据范围

类型 最小 最大
byte 0 255
short -32768 32767
int -2147483648 2147483647
long -9223372036854775808 9223372036854775807

无符号类型的最小值是0,最大值是原版的2倍+1

支线任务

补码

你可能会好奇,为什么负数的表示范围比整数多1
因为0是不需要符号的,+0和-0表示的是同一个数
可是,我们用正数比较多,为什么不是正数范围比负数多1?

这个问题需要解释补码这个概念
首先你需要知道一个问题,就是cpu只能算加法
那么cpu要怎么算减法呢?

如果一个钟快了20分钟,想较准有两种方法
一是往后调20分钟
二是再调快11小时40分钟
对,既然各数值都有一个范围,这个范围也是它的周期
那么只要越过周期跨一个轮回能算减法了

所以当你开修改器将某个数值改的超大的时候
在加一点数值就会变成一个非常负的数值
因为你碰到他的界限,从0开始了

补码的负数表示

为什么补码周期的开始是非常负的负数而不是0呢
我用5bit的数据演示一下
01010,这是+10
11111,这是-1
两个数加起来,如果是2就往前面进位
101001,现在他是6bit了,把溢出的那个1丢掉
01001,+9

一个越接近临界值的数,表示的负数就越小(绝对值)
因为相加溢出后原本正数补偿临界的数就越小,减少的也就越小
而且这种表示方法还有一个好处
符号位并不是单独提出来算他们的绝对值然后再放回去的
而是一起参与了加法

而且你就知道了为什么游戏中和c#中数值溢出不会报错
因为计算减法本身就需要数据溢出

猜你喜欢

转载自blog.csdn.net/zms9110750/article/details/108542008