第2章 信息的表示和处理
- #include<stdio.h>
- typedef unsigned char* byte_pointer;
- void show_bytes(byte_pointer start, size_t len) {
- size_t i;
- for (i = 0; i < len; i++)
- printf("%.2x", start[i]);
- printf("\n");
- }
复制代码 上述这段代码是书中的一部分。
- size_t:无符号整形,在32位系统上占4个字节,是unsigned int;在64位系统上占8个字节,是Unsigned long。
- %.2x:输出十六进制,宽度至少为两位。
这段程序的意思是,打印程序对象的字节表示。
大端机器:低地址存放高位数据。
小端机器:低地址存放低位,如window,linux。
- Unicode,基本编码,统一用32位表示字符。
缺:每个字符都要占用4个字节
- utf-8,常用字符只需要1-2个字节,不常用的才需要4个字节,向下兼容ASCII
Java使用unicode表示字符串。
从机器的角度看,程序只是一串0和1。
R G B
红 绿 蓝
000 黑色
111 白色
100 红色
010 绿色
001 蓝色
还挺有意思的。
从布尔运算到位运算
位运算的典型应用:掩码运算
掩码运算:从一个字中选出特定的位
逻辑运算
and or not
移位运算
整数表示
C语言头文件stdint.h重定义了一些数据类型。
端午节。
我觉得这部分看着好无聊,看不下去,总想跳。
从2.1-2.3 讲得都是关于整数,整数如何表示以及整数的加减乘除。
C语言有有符号数和无符号数,这二者编译成二进制表示不太一样。
如果是无符号数,那就直接转成二进制;
如果是有符号数,那就采用补码的方式。
java只有有符号数,也就是采用补码,所以在任何系统上安装了解释器就可以很快解释好。
下面是浮点数。
对于浮点数,二进制只能无限逼近,而不能精确表示。
如\(\frac{1}{5}\)
0.0
0.01 0.25
0.001 0.125
0.0011 0.1875
0.001101 0.203125
可见位数越多能够表示的数据也就越精确。
OH,no这下面讲的什么鬼,我都不太能看懂。
只能说大部分都没有看懂。
没关系没关系,继续看第3章吧。
程序的机器级表示。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |