二进制小数 就像十进制小数一样,二进制的小数点左边是正幂,右边是负幂,只不过幂底由10变成2。小数点可以移动,左移表示除以2,右移表示乘以2。 同十进制小数只能精确表示10的幂组成的数一样,二进制小数也只能精确表示由2的幂组成的数。同十进制小数一样,如果想要更接近不能精确表示的数,只有通过增加位数来
整数运算也分为两种,无符号整数和有符号整数。 无符号加减法 无符号就是简单将两个二进制位相加。但是结果存在溢出的问题,即结果无法放到字长的限制中去。 如果字长是w,则无符号数最大就是2的w次方减1,这就导致如果两个数的和如果到达2的w次方,结果实际上就少了2的w次方。比如字长为4,1001+1001
袁春风的书讲的稀里糊涂。确实直接看CSAPP就很好。 整数的大类有两种,一种只能表示非负数,一种可以表示负数,零和正数。虽然通常叫无符号数,但是CSAPP的这个讲法显然更容易懂。 无符号数的编码 无符号数的编码,等于每位二进制数乘以总权重,最右边一位是2的0次方,然后是2的1次方。依次类推。 无符号
CSAPP 第二章 信息存储 昨晚加班到2点钟,今天稀里糊涂的,还是做点题目来冷静一下。目前进度到40页,把第二章的第一部分,信息存储看完了。 第一大部分是进制之间的转换,目前主要是十六进制和二进制以及十进制之间的转换。 2.1 完成数字转换 0x39A7F8,转换成二进制,就是把每位16进制展开,
看到前边多进程的时候就知道肯定后边有多线程,否则只用进程就太重型了。但是使用线程就要碰到数据共享的问题了。 创建线程 C的线程库是pthread.h,使用这个库来操作线程。 使用线程的步骤是: 创建需要在线程中运行的函数 创建一个结构pthread_t pthread_create()创建并立刻运行
开始看C下边的网络编程了。前边的一堆系统编程算是刚消化完基础使用。现在要来看网络编程了。 简单的服务器 网络编程么,只要不是想直接控制TCP/IP协议,一般都会选择抽象程度比较高的套接字来通信。 先来写一个简单的服务器,分这么几步: 创建套接字 把套接字绑定端口 开始监听 接受连接 写套接字信息 创
有了进程,进程之间是互相独立的。可以使用管道来进行进程间通信。在开始之前,先复现一下Head First C中的例子: 多进程读取RSS的例子 #include <time.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#
为何经常要把C和操作系统联系起来,因为一来操作系统就是C写的,二来C要发挥作用,由于比较底层,与操作系统的直接交互非常多。 这次要看看之前看C现代方法时候从来没有接触过的内容,也就是进程和系统调用了。 系统调用初步 stdlib.h中的system()函数就是系统命令行调用。 这个参数接受一个字符串
这一章是经常遇到但是没有仔细深究的一个玩意,叫做动态链接库的解说。原来这是C语言里的概念。 库位置与静态链接 一般linux都带有GCC,而windows则不会。最好还是在linux上运行程序。 之前写过的两个解密和生成验证码的程序: //encoder.c
#include "encoder.h"