事实上写这篇对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数据类型,切记。!

!)



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

  1. 计算机基础--Java中int char byte的关系

    计算机基础--Java中int char byte的关系 重要:一个汉字占用2byte,Java中用char(0-65535 Unicode16)型字符来存字(直接打印输出的话是字而非数字),当然要用 ...

  2. byte类型的取值为什么是-128~127

    参考:https://blog.csdn.net/qq_22771739/article/details/84496115 https://blog.csdn.net/boatalways/artic ...

  3. Java基础系列1:Java基本类型与封装类型

    Java基础系列1:Java基本类型与封装类型 当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型. 本篇聊Java数据类型主要包括两 ...

  4. [转载]存储基础:DAS/NAS/SAN存储类型及应用

    这篇文章转自博客教主的一篇博客存储基础:DAS/NAS/SAN存储类型及应用, 他是在张骞的这篇博客DAS,NAS,SAN在数据库存储上的应用上做了部分修改和补充.   一. 硬盘接口类型 1. 并行 ...

  5. C# 读取 timestamp 时间戳 值为byte[] 类型时转换为时间戳字符串

    C# 中如何读取出来的时间戳为 byte[] 类型的话,用以下方式转换成 16进制字符串 string tmpUfts = "0x"+ BitConverter.ToString( ...

  6. int类型和byte类型的强制类型转换

    今天在读<Java网络编程>这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方.这个地方有点细节,不过就应该把这种细节把握住. 情况是这样的,讲到In ...

  7. int类型被强制转换成较低精度的byte类型

    公司的项目上线之前会进行代码合规性检查,其中很容易违反的一个规则就是“不要把原始类型转换成较低的精度”,实际开发的过程中,很多方法在处理数据时,尤其在做移位操作的时候,难免要把int类型转换成byte ...

  8. C++开发中BYTE类型数组转为对应的字符串

    下午密码键盘返回了一个校验码,是BYTE类型数组,给上层应用返回最好是字符串方式,怎样原样的将BYTE数组转为string串呢?不多说,开动脑筋上手干!!! BYTE格式的数组bt{08,D7,B4, ...

  9. 详解java中的byte类型

    Java也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte.下面这篇文章主要给大家介绍了关于j ...

随机推荐

  1. ie不支持max-height的解决之法

    .div{ max-height: 100px; _height:expression(this.scrollHeight > 100 ? "100px" : "a ...

  2. Android开发之ListView条目批量选择删除

    ListView实现的列表,假设是可编辑,可删除的,一般都要提供批量删除功能,否则的话,一项一项的删除体验非常不好,也给用户带来了非常大的麻烦. 实现效果图 详细实现代码 select.xml 主布局 ...

  3. 关于DirectShow SDK 和Windows SDK,及DirectX SDK

    关于DirectShow SDK 和Windows SDK,及DirectX SDK   本文描述了DirectShow SDK ,Windows SDK,DirectX SDK ,VS200?之间的 ...

  4. 关于OpenLDAPAdmin管理页面提示“This base cannot be created with PLA“问题. Strong Authentication Required问题

    经过查询,最终总结和处理如下: 1.首先需要在/etc/openldap/目录下,创建一个base.ldif文件,如下所示: 2.在base.ldif文件中,写入如下信息,为创建初始化根节点做准备工作 ...

  5. Derby安装,创建数据库,在Java程序中使用Derby

    1,下载并安装Derby: 下载地址:http://db.apache.org/derby /derby_downloads.html,下载最新版本. 我用的是10.5.3.0. 解压缩到任意文件夹, ...

  6. 8个对程序员来说有用的jQuery小贴士和技巧

    1) 禁用鼠标右键单击 jQuery程序员可以使用此代码在网页上禁用鼠标右键点击. 1 2 3 4 5 6 7 8 9 10 $(document).ready(function() {     // ...

  7. 校验IPv4和IPv6地址和URL地址

    1.校验IPV4地址: function validateIp(obj) { var ip=$(obj).val(); var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;// ...

  8. 《TCP/IP具体解释卷2:实现》笔记--接口层

    接口层包含在本地网上发送和接收分组的硬件与软件. 我们用设备驱动程序来表示与硬件及网络接口通信的软件,网络接口是指在一个特定网络上硬件与设备驱动器之间的接口. Net/3接口层试图在网络协议和连接到一 ...

  9. Android -- SlidingMenu

    实现原理 在一个Activity的布局中需要有两部分,一个是菜单(menu)的布局,一个是内容(content)的布局.两个布局横向排列,菜单布局在左,内容布局在右.初始化的时候将菜单布局向左偏移,以 ...

  10. Android4.2.2 Gallery2源码分析(4)——GLCanvas.java

    首先申明,找到这个类是在GLRootView.java中发现的线索.这是一个接口,源码中对该接口作了详细的说明: // // GLCanvas gives a convenient interface ...