计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。
正整数的补码是其二进制表示,与原码相同.
求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1。-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)
UNIX系统代码段和数据段分开的目的:
1)防止程序指令被修改,设置代码段权限为只读,设置数据段权限为可读写
2)代码段和数据段分开有利于提高程序的局部性,现代CPU缓存一般设计为数据缓存和指令缓存分离,指令和数据分开存放可以提高CPU缓存命中率。
3)共享指令,当系统运行多个程序的副本时,它们指令是一样的,因此内存只需保存一份程序的指令代码。每个副本进程的数据区是进程私有,可以节省内存。
在UNIX中,$$、$@、$#以及$*的含义分别如下:
$$表示当前命令的进程标识数。
$*表示所有位置参量,例如$1、$2等。
$@与$类似,但当用双引号进行转义时,”$@”能够分解多个参数,而”$“合并成一个参数。
$#包括位置参数的个数,但是不包括命令名。