Chapter02-信息的存储

1.信息的存储

  • 通常情况下,程序将内存视为一个非常大的数组。数组的元素是由一个个的字节组成,每个字节都由一个唯一的数字来表示,称之为地址。这些所有地址的集合称为虚拟地址空间。
信息的存储.jpg

2.字节

  • 1个字节是由8个位组成,在二进制中,每一位的值可能有0或者1两种状态。当这8个位全为0时,表示一个字节的最小值;当这8个位全为1时,表示最大值;如果用十进制来表示,那么一个字节的取值范围就在[0,255]之间。上面这种按照一位一位表示数据的方式称为位模式
位模式.jpg

3.十六进制表示位模式

  • 在C语言中,十六进制数是以0X或0x开头。字母部分可以是全部大写或全部小写或者大小写混合。
十六进制、二进制、十进制.jpg
  • 二进制与十六进制之间的转换:将二进制数从右向左,每四位为一组来转换成相应的十六进制数。如果总位数不是4的倍数,那么最左边的一组会出现小于4位的情况,这时将前面进行补0。接着,将每4位为一组的二进制数进行一一转换即可得到十六进制数。
二进制与十六进制转换.jpg
  • 如何将形如2的n次方的数快速转换为二进制数?
2^0 = 1          0个0
2^1 = 10         1个0
2^2 = 100        2个0
2^3 = 1000       3个0
2^4 = 10000      4个0
2^5 = 100000     5个0
....
2^n = 1000...000 n个0

n = i + 4j:n除以4,j是商、i是余数,i的可能取值是0、1、2、3,因此与之对应的十六进制数是1、2、4、8

例如2^13, n = 13 = 1 + 4 * 3,因此2^13 = 0x2000
  • 十进制与十六进制之间的转换:使用辗转相除法,每次使用得到的商来除以16,直到得到的商不能被16整除为止。将得到的余数用16进制来表示,然后自下而上书写即可得到十六进制表示。
十进制转换成十六进制数.jpg

4.字长Words

  • 字长决定了虚拟地址空间最大值可以到多少,对于32位机器,虚拟地址空间最大为4GB;64位机器,虚拟地址空间最大为16EB。
字长.jpg
  • 大多数64位的机器做了向下兼容,因此32位机器编译的程序也可以运行在64位机器上。在64位机器上,可以通过命令gcc -m32 -o hello32 hello.c编译生成可以在32位机器上运行的程序。通过修改编译选项gcc -m64 -o hello64 hello.c,就可以编译生成在64位机器上运行的程序。
不同类型数据占用不同字节空间.jpg

5.地址和字节序

  • 一个int类型的变量x=0x01234567,假设地址位于0x100处。由于int类型占4个字节,因此x被存储在地址为0x100~0x103的内存处。
大端模式与小端模式.jpg
  • 大端模式:最高有效字节存储在最前面即低地址处。IBM和Sun公司的机器大多采用大端法。

  • 小端模式:最低有效字节存储在最前面即低地址处。大多数intel兼容机采用小端模式。

    // 判断大、小端模式测试程序
    #include <stdio.h>
    
    typedef unsigned char* byte_pointer;
    
    void show_bytes(byte_pointer start, int len) {
        int i;
        for(i = 0; i < len; i++) {
            printf("%.2x", start[i]);
        }
        printf("\n");
    }
    
    void show_int(int x) {
        show_bytes((byte_pointer) &x, sizeof(x));
    }
    
    

6.存储字符串

  • C语言中的字符串被编码为以NULL字符结尾的字符数组,其中结尾字符的十六进制表示为0x00。使用ASCII码来表示字符,在任何系统上都会得到相同的结果。于是,文本数据比二进制数据具有更强的平台独立性。
字符串存储.jpg

7.布尔代数

  • C语言中,支持按位进行布尔运算。具体如下图所示:
布尔代数.jpg
C语言中的布尔运算.jpg

8.位掩码运算

  • 对于操作数0x89ABCDEF,我们希望得到该操作数的最低有效字节的值EF,可以通过&上0xFF这样就得到了最低有效字节0x000000EF;
位掩码运算.jpg

9.逻辑运算

  • 逻辑运算中,所有非零的参数都表示为true,只有参数0表示为false。逻辑运算的结果只有两种true/false,而位运算只有在特殊的数值条件下才会得到0或者1。
逻辑运算.jpg

10.移位运算

  • 对于8位二进制数01100011,左移一位就是丢弃最高的1位,并在右端补1个0,具体结果如下图所示:
左移一位.jpg
  • 对于右移运算,分为逻辑右移和算术右移。逻辑右移和逻辑左移只是在方向上存在差异,逻辑右移一位就是丢弃最低的1位,并在左端补一个0。
逻辑右移一位.jpg
  • 对于算术右移,以下以10010101为例说明。当算术右移的操作对象的最高位等于0时,算术右移等于逻辑右移,两者没有任何差别;当操作数的最高位为1时,算术右移后,左端需要补1而不是补0;
算术右移且操作数的最高位等于0.jpg
算术右移且操作数的最高位等于1.jpg
  • 虽然C语言中并没有明确的规定有符号数应该使用哪一种类型的右移方式,但实际上几乎所有的编译器以及机器的组合都是对有符号数使用算术右移;对于无符号数,右移一定是逻辑右移;

11.参考资料

[1].本文图片来源,侵权必删:https://www.bilibili.com/video/BV1cD4y1D7uR?p=6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容