输出变量的字节表示形式
2015-05-22 14:42
330 查看
深入理解计算机系统P28提到了输出变量的字节表示形式。
不同的处理器,有两种排列表示规则,一种是小端法,另一种是大端法。
书中图2-4提供的程序使用的是unsigned char 类型的指针变量。然后我试着输出了16(int)的字节表示形式,如下图:
随后我有一个想法,输出字节表示形式能否用char类型的指针变量呢?经过实验发现16(int)的字节表示形式与之前的结果是完全相同的。但-16(int)的字节表示形式的结果与之前有些”不同”了,结果为:
随后通过网络查找关于unsigned char 与 char的资料也没有找到答案。后来查找到了关于输出占位符%x的含义:”%x无符号以十六进制表示的整数”。
咦?整数?好像找到了原因。
整数占4个字节,2个16进制位占1个字节,机器存储整数是以补码的形式。负数的最高位是1,那也就需要输出8个16进制位了。
关于符号位扩展的相关资料:
一、短数据类型扩展为长数据类型
1、要扩展的短数据类型为有符号数的
进行符号扩展,即短数据类型的符号位填充到长数据类型的高字节位(即比短数据类型多出的那一部分),保证扩展后的数值大小不变
[1]:char x=10001001b; short y=x; 则y的值应为11111111 10001001b;
[2]:char x=00001001b; short y=x; 则y的值应为00000000 00001001b;
2、要扩展的短数据类型为无符号数的
进行零扩展,即用零来填充长数据类型的高字节位
[1]:unsigned char x=10001001b; short y=x; 则y的值应为00000000 10001001b;
[2]:unsigned char x=00001001b; short y=x; 则y的值应为00000000 00001001b;
二、长数据类型缩减为短数据类型
如果长数据类型的高字节全为1或全为0,则会直接截取低字节赋给短数据类型;如果长数据类型的高字节不全为1或不全为0,则转会就会发生错误。
三、同一长度的数据类型中有符号数与无符号数的相互转化
直接将内存中的数据赋给要转化的类型,数值大小则会发生变化。另短类型扩展为长类型时,但短类型与长类型分属有符号数与无符号数时,则先按规则一进行类型的扩展,再按本规则直接将内存中的数值原封不动的赋给对方。
不同的处理器,有两种排列表示规则,一种是小端法,另一种是大端法。
书中图2-4提供的程序使用的是unsigned char 类型的指针变量。然后我试着输出了16(int)的字节表示形式,如下图:
随后我有一个想法,输出字节表示形式能否用char类型的指针变量呢?经过实验发现16(int)的字节表示形式与之前的结果是完全相同的。但-16(int)的字节表示形式的结果与之前有些”不同”了,结果为:
随后通过网络查找关于unsigned char 与 char的资料也没有找到答案。后来查找到了关于输出占位符%x的含义:”%x无符号以十六进制表示的整数”。
咦?整数?好像找到了原因。
整数占4个字节,2个16进制位占1个字节,机器存储整数是以补码的形式。负数的最高位是1,那也就需要输出8个16进制位了。
关于符号位扩展的相关资料:
一、短数据类型扩展为长数据类型
1、要扩展的短数据类型为有符号数的
进行符号扩展,即短数据类型的符号位填充到长数据类型的高字节位(即比短数据类型多出的那一部分),保证扩展后的数值大小不变
[1]:char x=10001001b; short y=x; 则y的值应为11111111 10001001b;
[2]:char x=00001001b; short y=x; 则y的值应为00000000 00001001b;
2、要扩展的短数据类型为无符号数的
进行零扩展,即用零来填充长数据类型的高字节位
[1]:unsigned char x=10001001b; short y=x; 则y的值应为00000000 10001001b;
[2]:unsigned char x=00001001b; short y=x; 则y的值应为00000000 00001001b;
二、长数据类型缩减为短数据类型
如果长数据类型的高字节全为1或全为0,则会直接截取低字节赋给短数据类型;如果长数据类型的高字节不全为1或不全为0,则转会就会发生错误。
三、同一长度的数据类型中有符号数与无符号数的相互转化
直接将内存中的数据赋给要转化的类型,数值大小则会发生变化。另短类型扩展为长类型时,但短类型与长类型分属有符号数与无符号数时,则先按规则一进行类型的扩展,再按本规则直接将内存中的数值原封不动的赋给对方。
相关文章推荐
- 将一个int类型变量(4字节), 以二进制形式进行输出--showbits.c
- 编程之美读书笔记:求一个字节(8bit)的无符号整型变量表示的二进制中1的个数
- 枚举.values()表示得到全部的枚举内容,然后以对象数组的形式用foreach输出
- 输出内存中存储的二进制表示形式
- 郝斌数据结构 06 所有指针变量只占4个字节(相对于32位来说) 用第一个字节的地址表示整个变量的地址
- C语言---程序的一般形式、数据类型、常量变量、运算符、表达式、格式化输入输出
- 1/7 = 0.142857142... 是个无限循环小数。 任何有理数都可以表示为无限循环小数的形式。 本题目要求即是:给出一个数字的循环小数表示法。 例如: 输入: 1,5 则输出: 0.2 输入
- 以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法
- C#实现将浮点数表示的货币数量以汉字大写形式输出的方法
- 请求一个action,将图片的二进制字节字符串在视图页面以图片形式输出
- 将一个4字节的整数的二进制表示中的001替换为011,输出替换后的整数。
- 函数不能返回临时变量,可以采用输出参数形式
- ZendFramework学习第二章(视图脚本的变量调用形式和转义输出)
- 对于一个字节(8bit)的变量,求其二进制表示中"1"的个数,要求算法的执行效率尽可能地高。
- 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。 现在请计算A+B的结果,并以正常形式输出。
- VC2005调试器变量输出窗口有1024字节限制
- ZendFramework学习第二章(视图脚本的变量调用形式和转义输出)
- C语言中以字符串形式输出枚举变量
- 输出变量的每个字节的值
- 一个字节(8bit)的无符号整形变量,求二进制表示中“1”的个数。