您的位置:首页 > 编程语言 > C#

C#基础蛋疼到爆的Byte类型表数范围之网兜毛衣见解……

2017-04-12 08:37 357 查看
事实上写这篇对Byte类型表数范围的文章,真的是蛋疼+蛋疼+蛋疼,每每看到Byte表数范围这一块。都对-128如此的陌生与迷茫。操蛋的Byte,操蛋的人生……

熊孩子出场:Byte

恶作剧结果:表数范围(-128-------127)

蛋疼原因:上了个不太好的大学,在计算机组成原理课上。老师也在原码、反码、补码中神游……

决心又一次做人:以前有一个Byte摆在我面前让我去爱上她,但是我没有珍惜,假设上天再给我一篇博客,我决定对她说:“我要为你写一万遍……”

1)难点在于为何表数范围为-128-----127?不懂。不懂,还是不懂。

127好理解。就是01111111,但为何-128是10000000???你妈这倒底是为什么……

2)以下就谈一谈我个人的一些思路(大神请赶紧踩我參与讨论呀)

一:穷举

Byte八位数穷举太复杂。举例三位二进制。

100,101。110,111,000,001,010。011。表数范围为2的3次方是8.(注意,这里的100就相当于Byte穷举后的10000000)

由于计算机中的全部数全是由补码的形式来表示。所以[b]100,101。110,111,000,001,010,011全是补码。

[/b]

[b]先看正数:000的十进制为0。001的为1,010的为2。011的为3.即三位二进制的正数范围为0,1,2,3.[/b]

[b]再看负数的补码:100,101,110,111.(关键来了,希望各位同僚注意看)[/b]

[b]101的十进制数为-3,110的为-2,111的为-1[/b]

[b]再看100!。!

依据穷举来看。100仅仅能代表-4.
[/b]

[b]由样例转到Byte。Byte正数范围表示为0----127(00000000------01111111)。负数范围表示为-128至-1(10000000------11111111)[/b]

[b]二:再讨论10000000为何代表-128?[/b]

[b]有人说了,你不前边对8位二进制穷举算出来10000000是-128吗?确实是这样。但假设用我们伟大的原码、反码、补码来算出来的话,那更有说服力是吧![/b]

以下就開始算补码10000000的十进制数是多少。(要按正常的方法算是符号位1不变。其余7位取反然后末位加1得原码。这样算出来还是10000000。难道十进制数为-0?)

非常可惜。至少在我们地球上还没有负0这个说法。那么10000000是怎样算出-128的呢?

计算过程:保留符号位1,其余7位0000000取反加1为10000000,加上符号位1,最后得出的原码是110000000,但计算中有一个规则。就是超出8位的部分自己主动丢弃,所以就变成了10000000,为128,得出的是正数值128。但原先的10000000是负数,则为-128.

算出来啦……

(更正错误……在C#中。sbyte表示带符号8位整数类型,byte则表示无符号整数类型。所以在此……以上对-128~127的讨论仅针对sbyte数据类型,切记。!

!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: