zoukankan      html  css  js  c++  java
  • C#基础蛋疼到爆的Byte类型表数范围之网兜毛衣见解……

    事实上写这篇对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)

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

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

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

    101的十进制数为-3,110的为-2,111的为-1

    再看100!。!

    依据穷举来看。100仅仅能代表-4.

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

    二:再讨论10000000为何代表-128?

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

    以下就開始算补码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数据类型,切记。!

    !)


  • 相关阅读:
    快来使用Portainer让测试环境搭建飞起来吧
    ReviewBoard安装记录(CentOS5)
    awk中的NR,FNR ,NF,$NF,RS,ORS,FS,OFS
    Argument list too long解决办法
    Jenkins插件开发(6.3)—— 追踪jenkinscli.jar
    AWK中如何按列求和
    JIRA中显示中文显示为乱码“口口口”的解决方式(CentOS)
    Jenkins常用插件记录
    Jenkins插件开发(6.4)—— 分析CLI源码
    Jenkins插件开发(6.2)—— 如何自定义CLI命令
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6697453.html
Copyright © 2011-2022 走看看