cmu15213第二章
part1
课件
对于一个二进制数来说,左边是高位,右边是低位
与& 或| 非~ 异或^
负数=正数的补码,也就是取反再+1
对于一个n位的二进制数,无符号时它能表示的范围是0~2n-1,有符号时能表示的范围是-2n-1~2n-1-1
表达式中同时有int和unsigned int时,int会转换为unsigned int。进行大小比较时都为有符号数时大小比较和十进制整数比较结果是一致的;有符号数与无符号数比较时,有符号数直接被视为无符号的二进制数与无符号数进行比较,所以-1(11111111)>0U而-1<0。
int进行扩展时,高位补充符号位,也就是正数左边加0,负数左边加1,无符号数左边加0,值不变。截断时从左边减少位数,对于无符号数相当于mod操作,对有符号数截断前后符号不变则相当于mod操作,否则有区别,除非是位数小的数否则截断会改变值。
可以通过位与运算对整数进行截断,操作数低位是1高位是0,1的个数就是截断保留位数,如x & 0x0fff代表只保留低位的12位
若在计算式中两个操作数的位数不同,位数小的会自动扩充到跟位数大的相同
作业
二进制部分
- 2=01;5=101;7=111;10=1010
- 2;3
- 2=01;3=11
- 10000=16;100000=32;1000000=64
- X=2N-1,2N=2X
- 0;1;0;1;0;1;0;1;0;1;0 每1个数变化
- 0;0;1;1;0;0;1;1;0;0;1 每2个数变化
- 0;0;0;0;1;1;1;1;0;0;0 每4个数变化
-
Deciaml Binary
11 1011
12 1100
13 1101
14 1110
15 1111 -
Deciaml Binary
64 1000000
65 1000001
66 1000010
67 1000011
68 1000100 - 1;2;4;8;16;2N
- 50
- 不改变,因为0乘以任何数都是0,原数加上0和不变
- 原值不是0的话会改变值,因为每一位的权值多乘以一次10
- 24;23;22;21;20
- 124+123+0*20+021+120=16+8+1=25
- 不改变,理由同上
- 原值不是0的话会改变值,因为每一位的权值多乘以一个2
- 100101=1+4+32=37;111011=1+2+8+16+32=61;1000001=1+64=65
- di*210
- 4=22;6=22+21;7=22+21+20;20=24+22;48=25+24
- 0110000
- 循环寻找小于当前值的最大2的指数幂,当前值减去该值进入下一轮循环
- 11111111=255
无符号时它能表示的范围是0~2N-1,有符号时能表示的范围是-2N-1~2N-1-1
1110011=1+2+16+32+64=130
99=1100011
Group Reflection
- 0-15
- 16
- 160
- 161
- 0x100=256
- 十六进制使用的位数更少
- 0x15
- 0x20
- 0x30=48;0x5A=90;0x11D=285
- 1001;1010;1011;1100;1101;1110;1111
- 1100 1010 1111 1110;1000 1011 1101 1111 0000 0000 1101
- 从低位开始每4位二进制字符转成对应的一个16进制的字符,高位不足的在左侧补0
- 0xD1E;0x37
- 93785
- 18
- 10
- 1;1;10
- 2
- 0 0 1;0 1 10;1 0 10;1 1 11
- 2
- 1110
- 9+5=14
- 10110
- 5
- 多1位
- N+1
- 最高位可能会溢出
0x6FA=0110 1111 1010
1111011=0x7B
16. 0
17. 32=0100000;42=0101010
18. 3=011;-8=11000
19. 最左边是0是正数,是1为负数
20. 1111;01111;10000;10001
21. 00 01;001 010;010 011;011 100;0100 0101
22. 最左边加0的话与positive相同
23. 23;-6
24. 3;3;3;-3;-3;-3
25. 最左边再补一个与符号位相同的数
26. 从最左边开始截掉,保留到第一位仍与截掉的数一致并与第二位不同
27. 3 -4;7 -8
28. 2N-1-1
29. -2N-1
30. 指数相同,大小差1
31. 2N
32. 1100
33. -7+3=-4
34. 全部转为2的补码后做二进制加法
35. 浪费了1位导致表示的数字范围变小
- 1111000(120)+0100111(39)=10011111(159)
- -1;418
- 01101001;1000011110
- -231~231-1
part2
课件
两个unsinged int相加时,如果出现溢出直接保留后面的位数
两个正数相加可以符号位前会多出来一位,如果这一位和符号位相同则没有溢出,如果出现10是负溢出,01是正溢出,出现溢出的话计算结果一定是错误的
乘法的取值范围,x和y都是w位的整数:
1. 若都是无符号数,则xy的取值范围是0~(2w-1)2=22w-2w+1+1
2. 若都是有符号的数,xy最小值是(-2w-1)·(2w-1-1)=-22w-2+2w-1
3. 若都是有符号的数,xy最大值是(-2w-1)2=22w-2
无符号数相乘溢出时,直接截取右边的n位;有符号数相乘也是截取,但是有时候会导致符号的变化
左移k为相等于乘以2k,右移k为相当于除以2k
大小端模式:首先对于一个字节串来说左边是高位右边是低位,而地址是从左到右增大的。大端存储就是把高位的字节存储在低位的地址中,和我们的阅读习惯一致;而小端存储就是把低位的字节存储在高位的地址中。
作业
正数加法
- 10110
- 5
- 多一位
- 0110直接截取后4位
负数加法
- 10110
- 5
- 多一位
- 0110直接截取后4位
Review of Negative Integers
- 符号位
- 3 -4;7 -8
- 2N-1-1
- -2N-1
- 有符号1111000(-8)+0100111(39)=10011111(97)错误;无符号1111000(120)+0100111(39)=10011111(159)正确
- 不用,但是要注意溢出和地址扩展带来的错误
Bit-Level Operations
- 1100 1010 1111 1110>0011 0101 0000 0001>0x3501;0011 1100 0011 1100>1100 0011 1100 0011>0xC3C3;0000 0000 0000 0000>1111 1111 1111 1111>0xFFFF
- 0 1 1;1 1 0
- 1111 0001;0001 0001;0010 0000
- 1111 0001,最后一位是1
- FLAG bit is set in X
- 每一位代表一个设置,三个参数各有一个位置是1,或之后是三个位置为1,相当于三个设置为true
- 1110;1010;1111
Logical Operations
- 1false 15true
- false
- 0 1;1 0;0 1;0 1
- 不同~(~X)==X
Multiplication and Division
- 0x60;0x5A0;0x80000000
- 0110 6
- (x<<2)+(x<<1)
- 7 49 6
- 1
- 0x18;0x5;0x2
- 48 24;90 5;17 2右移n为相当于除以2n
- -1
- 1110 1111
- 0x5
- x&0x1 x=x>>1
part3
课件
二进制小数只能表示x/2k相加成的小数,其他数只能用循环节表示,类似于无限循环小数
IEEE小数,首先将十进制下的数通过乘以2的k次幂化为整数,然后将整数转为二进制,小数点左移k位再左移E位使得小数点左边只有一个1,原数=1.xxxxxx2E(符号位)写成最后的二进制表示时,符号位最左,然后是指数,最后是小数点右边的小数部分
32位:1位符号+8位指数+23位小数。64位:1位符号+11位指数+52位小数
取余数规律,过半保留,未过半舍去,恰好一半保留至偶数。对应到二进制,保留之后最后一位为0是偶数,从要截取位数开始超过10000...是过半
乘法时,指数相加,系数相乘,如果出现系数大于等于2,需要右移。加法时,指数小的一方右移直到指数一致,然后系数相加,如果出现系数和超过2的情况,需要再右移
移码=K+X,X为实际值,K为标准如IEEE754中为127,通常有规定全为1代表正无穷,全为0代表负无穷
作业
What is floating point
- 1.5213*104
- 05213104共8位,最左是符号位
- 1.8213*104需要8位
- 1.8213*107需要8位
- 1.0001 科学计数法是00001100
- 09999109=1.9999*109
- 位置不同
Binary Scientific Notation
- 1
- 1.011124;1.011122;1.011121;1.011120
- 1
IEEE Representation
- 符号位,负数
- 0111
- 差1
- 2,大于1
- 10000000
- 0100 0110 0110 1101 1011 0100 0000 0000
- -1022~1023
Extreme Exponents
- 1.0000
- 不能
- 2个,1正1负
- 0.0001
- +inf no
- 最大数指数都是0系数都是1.最小数指数除了最后一位是1其他是0,系数全是0
Addition and Multiplication
- 1.0011*24
- 4
- 1;1.0;1;2.0
- 1.00011 1.00 1;1.00101 1.01 1.25;1.111 10.0 2.0;1.101 1.10 1.5
- 1.010*24
- 2048
- 211
Simple Floating-point
- 01101111;00000000
- 0
- 01011100=111.00=7
- 1.0011*23=0x63
- +Inf 指数超过了3
Review
- 达到float上限时会退出,224
- 不会
- 一些int无法被转为完全相等的float
- 不会,double有53位来表示系数,所以32位的数可以完全相等的转化