博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#基础蛋疼到爆的Byte类型表数范围之网兜毛衣见解……
阅读量:6710 次
发布时间:2019-06-25

本文共 1280 字,大约阅读时间需要 4 分钟。

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

!)

转载于:https://www.cnblogs.com/gavanwanggw/p/6697453.html

你可能感兴趣的文章
Esper学习之十四:Pattern(一)
查看>>
js,jquery,css,html5特效
查看>>
Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
查看>>
lintcode: 旋转图像
查看>>
NoSQL 数据库产品学习总结(一)
查看>>
redis linux 基本命令
查看>>
MD5算法实现
查看>>
基于Solr实现HBase的二级索引
查看>>
http://www.360doc.com/content/12/0516/14/1671317_211422841.shtml
查看>>
tldr 的安卓客户端
查看>>
MySQL主从数据库同步延迟问题解决(转)
查看>>
JS实现表格排序
查看>>
深刻理解Java编程的7个例子
查看>>
虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)
查看>>
hibernate一对一主键双向关联
查看>>
SVN 多分支管理
查看>>
用现代化的方式开发一个图片上传工具
查看>>
log4j email EmailDailyRollingFileAppender
查看>>
Js页面刷新前提示-jquery页面刷新事件
查看>>
基于STM32的学习型通用红外遥控设备的设计实现(三)
查看>>