余姚网站定制,网站备案密码,网站开发需求方案,微信公众号里怎么做网站浮点运算是不可结合的#xff08;由于表示的精度有限#xff09;。比如(3.141e20)-1e20是0.0而3.14(1e20-1e20)是3.14。整数虽然只能编码一个较小的取值范围#xff0c;但是是准确的#xff1b;浮点数虽然能编码更大的范围#xff0c;但是是近似的。
二进制转十六进制转换…浮点运算是不可结合的由于表示的精度有限。比如(3.141e20)-1e20是0.0而3.14(1e20-1e20)是3.14。整数虽然只能编码一个较小的取值范围但是是准确的浮点数虽然能编码更大的范围但是是近似的。
二进制转十六进制转换技巧1
如果x 2^n且n i 4ji∈[0, 3]那么可以将x写成 i’后跟j个0。其中i0, i’1; i1, i’ 2
i 2, i’4; i 3, i’8 记忆0001001001001000i表示后面0的个数
举例
x 2048 2^11此时n 11 3 4 * 2则i3, j2那么写成16进制为0x800
总线负责以定长字节块的形式传递信息。定长字节块就是字word其字节数就是字长word size。
对于一个字长为w位的机器而言虚拟地址的范围是0~2^w - 1程序最多访问2^w个字节。因此字长决定了虚拟地址空间的最大大小。
32位字长虚拟地址空间4GB
64位机器可以运行32位机器编译的程序这是一种向后兼容
linux gcc -m32 xx.c
linux gcc -m64 xx.c
前者可以在32/64位机器上运行后者则只能在64位运行。
大端和小端是一个对象所有字节的存储方式。假设一个变量x是int型位于地址0x100处十六进制值为0x01234567那么地址范围0x100~0x103的字节顺序依赖于机器。一般选择了os字节顺序救固定了。如果使用ASCII码字符串在任何机器都是一样的结果不看大小端所以str比二进制数据更具有平台独立性。
大端big endian
0x1000x1010x1020x103……01234567……
小端little endian
0x1000x1010x1020x103……67452301……
ASCII码适合英语文档增加其他字母之后有了Unicode使用4个字节编码。UTF-8包含ASCII每个字符用1个字节编码。Java使用Unicode表示字符串C也有支持Unicode的库。
位运算
^ XORexclusive-OR异或
布尔对||对都有分配律
a (b | c) (a b) | (a c)
a | (b c) (a | b) (a | c)
加法逆元additive inverse : x (-x) 0那么-x就是x的加法逆元
a ^ a 0 → (a ^ b) ^ a b
C语言逻辑运算符|| 认为非0参数都是True10是False0。同时如果第一个参数就能确定表达式的结果就不会对第二个参数求值。
xk 右移包括两种逻辑右移和算术右移。前者左端要补k个0后者是左端补k个最高有效位的值。比如x 0110 0011x 4算术右移 0000 0110x 1001 0101 → 1111 1001
对C来说几乎所有的编译器、机器都会对有符号数使用算术右移对于无符号数右移必须是逻辑右移。Java则规定是算术右移是逻辑右移。
位移的优先级低于 整数表示
机器规定的各种数据类型的取值范围不是对称的负数比正数的范围大1。但是C语言的规定某些是对称的char short int。而且C可以用2个字节实现int。C和C支持有符号默认和无符号数但Java只支持有符号数。 对向量 x ⃗ [ x w − 1 , x w − 2 , . . . , x 0 ] , B 2 T w ( x ⃗ ) − x w − 1 2 w − 1 ∑ i 0 w − 2 x i 2 i 对向量\vec{x}[x_{w-1}, x_{w-2}, ..., x_0], B2T_w(\vec{x})-x_{w-1}2^{w-1}\sum_{i0}^{w-2}x_i2^i 对向量x [xw−1,xw−2,...,x0],B2Tw(x )−xw−12w−1i0∑w−2xi2i
补码 two’s-complement。最高有效位称为符号位解释为负权negative weight-2^(w-1)也就是说这个最高位是1表示值为负。举例
B2T4([0101]) 5, B2T4([1101]) -8 4 1 -3
因此w位有符号数最大值应该是2(w-1)-1最小值是-2(w-1)。举例对于4位有符号数最大值应该是0111符号位是0剩余都是1也就是7最小值应该是符号位为1剩余都是0这样不会有加值也就是-8。这就是机器规定的有符号数的取值范围是不对称的原因。
数字长wU是无符号816UMax0xFF 2550xFFFF 65535TMin0x80 -1280x8000 -32768TMax0x7F 1270x7FFF 32767-10xFF0xFFFF00x000x0000
注意
1-1和UMax是一样的都是全1串
2UMax 2TMax 1
反码One’s Complement除了最高有效位的权是 − ( 2 w − 1 − 1 ) -(2^{w-1}-1) −(2w−1−1)外与补码一样。反码的来源是用[111…1]-x来计算-x的反码表示其实也就是直接按位反转。例如
0101 5w4则-5 1111 - 0101 1010 -1x(2^3-1)2-5 B 2 O w ( x ⃗ ) − x w − 1 ( 2 w − 1 − 1 ) ∑ i 0 w − 2 x i 2 i B2O_w(\vec{x})-x_{w-1}(2^{w-1}-1)\sum_{i0}^{w-2}x_i2^i B2Ow(x )−xw−1(2w−1−1)i0∑w−2xi2i
原码Sign-Magnitude最高有效位是符号位不参与计算用剩下的位计算值 B 2 S w ( x ⃗ ) ( − 1 ) x w − 1 ⋅ ( ∑ i 0 w − 2 x i 2 i ) B2S_w(\vec{x})(-1)^{x_{w-1}}\cdot(\sum_{i0}^{w-2}x_i2^i) B2Sw(x )(−1)xw−1⋅(i0∑w−2xi2i)
需要注意的是几乎所有现代机器都使用补码。
而且这两种表示方法中[000…0]都是0但反码中[111…1]表示为-0在源码中[10…0]表示为-0所以对于0都是由两种表示方式的。
C语言实现数据类型的强制转换时是改变了解释位的方式。
补码转无符号数 T 2 U w ( x ) { x 2 w , x 0 x , x ≥ 0 } T2U_w(x)\left\{\begin{aligned}x2^w, x0\\x, x\geq0\end{aligned}\right\} T2Uw(x){x2w,x0x,x≥0}其中w是字长