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数据类型,切记。!
!)
C#基础蛋疼到爆的Byte类型表数范围之网兜毛衣见解……的更多相关文章
- 计算机基础--Java中int char byte的关系
计算机基础--Java中int char byte的关系 重要:一个汉字占用2byte,Java中用char(0-65535 Unicode16)型字符来存字(直接打印输出的话是字而非数字),当然要用 ...
- byte类型的取值为什么是-128~127
参考:https://blog.csdn.net/qq_22771739/article/details/84496115 https://blog.csdn.net/boatalways/artic ...
- Java基础系列1:Java基本类型与封装类型
Java基础系列1:Java基本类型与封装类型 当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型. 本篇聊Java数据类型主要包括两 ...
- [转载]存储基础:DAS/NAS/SAN存储类型及应用
这篇文章转自博客教主的一篇博客存储基础:DAS/NAS/SAN存储类型及应用, 他是在张骞的这篇博客DAS,NAS,SAN在数据库存储上的应用上做了部分修改和补充. 一. 硬盘接口类型 1. 并行 ...
- C# 读取 timestamp 时间戳 值为byte[] 类型时转换为时间戳字符串
C# 中如何读取出来的时间戳为 byte[] 类型的话,用以下方式转换成 16进制字符串 string tmpUfts = "0x"+ BitConverter.ToString( ...
- int类型和byte类型的强制类型转换
今天在读<Java网络编程>这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方.这个地方有点细节,不过就应该把这种细节把握住. 情况是这样的,讲到In ...
- int类型被强制转换成较低精度的byte类型
公司的项目上线之前会进行代码合规性检查,其中很容易违反的一个规则就是“不要把原始类型转换成较低的精度”,实际开发的过程中,很多方法在处理数据时,尤其在做移位操作的时候,难免要把int类型转换成byte ...
- C++开发中BYTE类型数组转为对应的字符串
下午密码键盘返回了一个校验码,是BYTE类型数组,给上层应用返回最好是字符串方式,怎样原样的将BYTE数组转为string串呢?不多说,开动脑筋上手干!!! BYTE格式的数组bt{08,D7,B4, ...
- 详解java中的byte类型
Java也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte.下面这篇文章主要给大家介绍了关于j ...
随机推荐
- 用JavaScript,获取Table中指定的行、列
前言: 先要谢谢George Wing的慷慨赠书<悟透JavaScript>,让我更加感受到了技术交流的重要性,呵呵~ 进入正题,面试题中有一题:如何通过JavaScript获取Table ...
- java自动创建多级目录
// 创建文件上传路径 public static void mkdir(String path) { File fd = null; try { fd = new File(path); if (! ...
- 如何记录linux终端下的操作日志
如何记录linux终端下的操作日志 在linux终端下,为方便检查操作中可能出现的错误,以及避免屏幕滚屏的限制,我们可以把操作日志记录下来.常用的工具有 screen,script,以及tee等,通过 ...
- Mac下在Intellij Idea里设置VM运行参数的正确方法
打开应用程序,右键选择显示包内容 可以看到idea的初始jvm配置的位置: 但是真正生效的配置是个人目录下的此文件,注意每个版本都会重新生成一次 设置idea使其在右下角的位置显示内存使用情况:483 ...
- wifiphisher使用介绍
1.github地址:https://github.com/sophron/wifiphisher 2.需要安装在kali linux下面 3.需要两个无线网卡 4.安装方法是使用介绍,参考githu ...
- Objective-C:继承的体现
典型的继承例子:形状Shape为基类,继承它的类有:点类Point.圆类Circle.球体类Sphere.矩形类Rectangle.正方形类Square 点类Point也为基类,继承它的类有:圆类Ci ...
- 第十二章 ThreadPoolExecutor使用 + 工作机理 + 生命周期
1.最基础的线程池ThreadPoolExecutor 使用方式: /** * ThreadPoolExecutor测试类 * 注意: * 1.ThreadPoolExecutor是一个线程池 * 2 ...
- QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型
QSqlTableModel类继承至QSqlQueryModel类,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序 常用函数 QVariant headerDa ...
- iOS开发-UINavigationController简单介绍
导航条或者说导航栏目现在在App中基本上也算是标配,类似于父子级别的味道在里面,UINavigationController就是负责简化这一实现功能的,属于iOS开发中比较常用的一种容器View co ...
- Objective-C面向对象之实现类
一般涉及到面向对象都会C#,Java都不可避免的涉及到类,C#中类的后缀名是.cs,Java中是.java,Object-C中一般用两个文件描述一个类,后缀名为.h为类的声明文件,用于声明成员变量和方 ...