【CSAPP阅读笔记】之信息的存储
2017-05-17 12:26
295 查看
一、信息的存储
[b]1.进制转换[/b]在计算机中我们常需要装换的进制有二进制,十进制,八进制,十六进制。
其中,二进制,八进制,十六进制之间的转换都是非常简单的,直接参照下面的表进行按位替换就行了。要注意的是,八进制与二进制转换是一个八进制位等价三个二进制位,十六进制与二进制转换是一个十六进制等价四个二进制位。
二进制 | 八进制 | 十六进制 |
---|---|---|
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | |
1001 | 9 | |
1010 | A | |
1011 | B | |
1100 | C | |
1101 | D | |
1110 | E | |
1111 | F |
1.十进制装换为二进制:
void dec_to_bin( int dec ) { assert( dec >= 0 ); //保存每次除完之后的余数 int remain = 0; if ( dec == 0 ) return ; remain = dec % 2; dec = dec / 2; //递归求解 dec_to_int( dec ); printf( "%d", remain ); }
2.二进制转换为十进制:
void bin_to_dec( unsigned long bin ) { assert( bin >= 0 ); int result = 0; int i = 0; //权重 int weight = 1; while ( bin ) { result += (bin%10) * weight; bin /= 10; //模拟2的n次方 weight *= 2; } printf( "%d\n", result ); }
[b]2.大端存储和小端存储[/b]
关于大端小端,用一幅图就可以说清楚。
图表现的是字0x01234567分别在大小端机器内的存储结构, 其中高位字节的十六进制值为0x01,而低位字节值为0x67.
大端是字的高位存储在地址的底位,字的低位存储在地址的高位。
小端是字的高位存储在地址的高位,字的低位存储的地址的低位。
linux一般为小端机,Windows的pc版本一般为大端机。
[b]3.C语言中的位级运算[/b]
C语言的位级运算有 |(按位或),&(按位与),~(取反),^(异或),这些不用多说,值得说的一点就是可以利用异或实现不借助临时变量来交换两个变量的值,代码如下:
void inplace_swap(int *x, int *y) { *x = *x ^ *y; *y = *x ^ *y; *x = *x ^ *y; }
另外,这里再给出几种不借助临时变量来交换两个变量的值得其他方法:
void inplace_swap(int *x, int *y) { *x = *y - *x; //算出x和y之间的差值 *y = *y - *x; //用y减去y和x之间的差值,得到的就是x的值 *x = *y + *x; //用x加上y和x之间的差值,得到的就是y的值 }
还可以用栈实现这个功能,实现方法比较简单,就不在贴代码了。
[b]4.C语言中的移位运算[/b]
移位运算主要分为向左移动和向右移动,向左移动比较简单,都是采用的逻辑移位,而向右移动就要分情况处理,如果被移位的数是无符号的右移采用逻辑移位,如果是有符号的右移,大多都采用算术移位。
相关文章推荐
- 【CSAPP阅读笔记】之信息的存储
- 【CSAPP阅读笔记】之信息的存储
- 【CSAPP阅读笔记】之信息的存储
- CSAPP阅读笔记——第二章:信息的表示和处理
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- C++入门经典 笔记(第七章)使用数组和字符串存储信息
- Discuz!NT 代码阅读笔记(8.1)--DNT的几个分页存储过程解析
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- CSAPP阅读笔记(6)-异常控制流
- [CSAPP笔记][第二章信息的表示和处理]
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- PHP学习笔记:使用session来存储用户的登录信息
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Mongodb 3.2 Manual阅读笔记:CH9 存储
- C++入门经典 笔记 (第十九章)使用链表存储信息
- CSAPP阅读笔记(5)-连接
- CSAPP阅读笔记(4)-进程间通信
- Android自学笔记-8-Android数据存储1:文件、SharedPreferences和获取sd卡信息