计算机二进制的一些基础

二进制数

x表示待转换的二进制数,U是unsigned,T是补码(Two's Complement)
w是二进制的位数
n是从右到左的位数,从0开始。x_n是具体位上的值,比如1111。第零位到第四位都是1

b2u_b2t.png

二进制数的扩展和截取

Expand

  • Unsigned

    高位补0,比如 1111 4位扩展成8位, 则结果是 0000 1111 结果不变,都是15

  • Two's Complement

    高位补1,1011 4位扩展成8位,则结果是1111 1011 结果不变,都是 -5。注意,如果是正数,则不应该由补码表示,应当做Unsigned计算。

Truncate

  • Unsigned

    执行mod运算,比如 1111(15) 4位截取成3位,则结果是 111 = 15 mod 8 = 7

  • Two's Complement

    1. 1011(-5) 4位截取成3位,则结果是011 = 3 这是一种类似于mod的操作,(-5+8)mod 8 = 3
    2. 1101(-3) 4位截取成3位,则结果是101 = -3 结果没变

二进制的算术运算

加法

  • Unsigned

    两个无符号数进行加法运算,如果结果没超出Umax则可以正常表示,如果超出Umax,则对结果执行mod运算

    比如 1011(11)+0011(3)= 1110(14)能够正常表示

    1011(11)+1001(9)= 10100(20)截取借的位后,结果为4

  • Two's Complement

    两个补码进行加法运算,如果结果在Tmin和Tmax间能够则可以正常表示

    1110(-2)+1101(-3)= 11011,截取借的位后,结果为-5

    如果结果小于Tmin,则是负溢出

    1110(-2)+1001(-7)= 10111,截取借的位后,结果为7

    如果结果大于Tmax,则是正溢出

    0010(2)+0111(7)= 1001(-7),结果为-7

乘法

只考虑乘2^n

  • Unsigned

    两个无符号数进行乘法运算,没超出Umax则可以正常表示,如果超出Umax,则对结果执行mod运算

    0011(3)*0100(4)= 1100(12) 正常表示

    0101(5)*0100(4)= 010100 (20)截取借的位后,结果为4,相当于对结果取模

  • Two's Complement

两个补码进行乘法运算,如果结果在Tmin和Tmax间能够则可以正常表示

1101(-3)* 0010(2) = 11010(-6),截取后仍是-6

0011(3)*0010(2)=0110(6)正常表示

如果结果小于Tmin,则是负溢出

1011(-5)*0010(2)= 10110(-10),截取借的位后,结果为6

如果结果大于Tmax,则是正溢出

0110(6)*0010(2)= 01100(12),截取借的位后,结果为-4

除法

推算方法和乘法类似,通过右移完成,在java中 >>> 是逻辑右移(负数左边补0),>>是算术右移(负数左边补1)

-x

补码x求-x,不管x是正数还是负数,运算规则是每一位按位取反(包括符号位),再加1

0110(6) =》1010(-6)

1001(-7) =》0111(7)

32位和64位

32位系统地址由32bit组成,因此最大内存限制为2^32, 内存地址有32位的二进制表示。64位系统地址由64bit组成,但是现在不存在2^64大小的内存,所以当代64位计算机,一般只使用47位,所以有的时候看到我们能看到0x7ffffabdd124a这种格式的地址格式,他只有48位,且第一位为0,因此实际使用的只有47位,32位和64位系统的一个地址对应一个计算机的最小存储单元(一个字节)

IEEE二进制浮点数

V=(-1)^s *M * 2^E, V表示任何实数,M的取值空间为[1,2)。

IEEE依据这个公式提出了一种浮点数的标准|S|Exponent|Fractional|。将一个浮点数分三段表示S是浮点数的符号位0表示正,1表示负。Exponent表示指数,Fractional表示小数。

有3种浮点数的精度

S Exponent Fractional
单精度 1位 8位 23位
双精度 1位 11位 52位
扩展精度 1位 15位 64位

扩展精度类型是Intel提出的一种精度类型,不讨论

单精度有32位,双精度有64位

Exponent表示指数,且必须是无符号整型,由于无符号整型无法表示负数,IEEE引入了一个bias解决这个问题bias=2^(k-1)-1,k是Exponent的位数

公式中的E=Exponent-bias,这时指数E就包含的正数和负数了。

以单精度为例,bias=127,Exponent的取值范围为[0,255],则E的取值范围为[-127,128],当Exponent为0000 0000时 E=-127,Exponent为1111 1111时E=128。这两种情况的浮点数不是Normalized,这些特殊值保留用于处理特殊值如正负无穷,NaN等,双精度的和单精度类似

Fractional表示小数部分,默认整数位为1,所以实际上Fractional=M-1,双精度类似

举个例子:

15213.0=11101101101101=1.1101101101101*2^13

所以可以表示位0|10001100|11011011011010000000000

Java中float或double丢失精度问题

java中float是单精度的,double是双精度的,他们的小数部分都只能表示k/2^n , 0<k<2^n ,意思是如果分母不为2的幂次方,则不能正确的表达,只能无限地接近准确值。如

​```
public class LosePrecision {
    public static void main(String[] args) {
        double d = 1/5f;
        System.out.println(d);
    }
}

//result: 0.20000000298023224
​```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容