1.位运算
计算机中的数据都是二进制保存的,因此位运算就是对这些内存中的二进制数据进行直接操作,执行效率也会大大提高。
位运算符号:
& 与 两个位都为1时,结果才为1。
| 或 两个位都为0时,结果才为0。
^ 异或 两个位相同为0,相异为1。
~ 取反 0变1,1变0。
<<左移 各二进位全部左移若干位,高位丢弃,低位补0。>>右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,右移补1。
2.#中的数据类型
c#数据类型主要分为值类型,和引用类型。当声明一个值类型时,系统分配内存来存储值。
3.原码,补码
原码是最直观的一种带符号整数表示方式,是表示带符号整数的一种方式,其中最高位表示符号位,其他位表示数值的大小。但在计算机中,原码的使用相对较少,因为它有一些操作上的缺点,尤其是在加法和减法处理上。
在计算机系统中,数值一律用补码来表示和存储。因为补码做到了加法和减法操作的统一。使用补码时,负数的处理也可以使用和正数相同的加法和减法运算规则。
符号位:原码中最高位是符号位,0 表示正数,1 表示负数。
数值位:其余的位表示该数值的绝对值(无符号数值)。
正数的补码:与原码相同,正数的补码与原码没有区别。
负数的补码:先得到原码,符号位不变,其他位再取反,最后加 1。
4.负数的位运算
在计算机里,运算使用二进制补码,正数的补码是它本身,负数的补码是其他位取反,符号位不变,最后加1:。
比如15 原码 00001111,补码:00001111
-15 原码 10001111, 补码:11110001
5.浮点型和定点数
定点数:数据的小数点位置均是相同的,而且是固定不变的.
浮点数:使用科学计数法表达的实数。分为符号位、指数部分 和 尾数部分。
浮点数有两种常见格式:单精度浮点数(32 位)双精度浮点数(64 位)。
32 位单精度浮点数按如下方式分为三部分:
符号位 (S):1 位,表示数值的符号。如果符号位是 0,表示正数;如果是 1,表示负数。
指数位 (E):8 位,表示指数部分。
尾数位 (M):23 位,表示有效数字。
比如我们有一个单精度浮点数 12.25,如何表示它为 IEEE 754 单精度格式:
符号位 (S): 12.25 是正数,所以符号位是 0。
转换成二进制:12.25 转换为二进制是 1100.01。
归一化:将 1100.01 归一化为 1.10001 × 2^3,即指数是 3。
指数部分 (E):由于指数的偏移量(缩放因子)是 127,实际指数为 3,因此存储的指数值是 130
,即二进制表示是 10000010。
尾数部分 (M):尾数是 10001,我们去掉隐含的 1,只存储小数部分 10001,并在末尾补 0 使其长度达到 23 位,得到 10001000000000000000000。