一、
题目:
请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。
思路:
数据是存储在内存当中,假设将1存储到内存之中,小端存储和大端存储区别就在于第一个字节内容是1/0;而我们知道指针类型的作用有解引用操作时访问几个字节,char类型的指针就访问一个字节。
指针类型的意义:
1、指针类型决定了指针解引用操作符能访问几个字节:char *p;*p 访问了一个字节,int *p; *p 就访问4个字节。
2、指针类型决定了指针+1,-1,加的或者减的是几个字节; char *p;p+1, 跳过一个字节,int *p;p+1;跳过一个整型4个字节
解答:
大端字节序:数据的低位存储在内存的高地址中,数据的高位存储在内存的低地址中。
小端字节序:数据的低位存储在内存的低地址中,数据的高位存储在内存的高地址中。
二、
题目:
以下代码输出结果是什么?
解析:
-1是整型,但要存储在char里面,所以肯定需要进行缩减,首先将-1的反码计算出来(因为在内存中存储的是补码形式),并且-1的补码全是1,需要牢记!缩减时根据最后结果需要的比特位数从低位开始选取。又因为输出结果是整型类型,所以又需要整型提升(有符号数按照符号位补全,无符号数直接补0),所以a,b都是有符号数,因此整型提升之后全是1,而输出结果使用的是原码,因此直接输出-1。而c无符号整型,整型提升后前缀是0,所以原码反码补码一致,按照整型提升后的结果直接翻译输出即可。
答案:
-1,-1,255
三、
题目:
解析:
本题前面思路与上一题一致,首先需要,缩减,然后根据数据类型进行整型提升。唯一区别在于本题输出结果是%u,因此是无符号整型,所以整型提升后的结果不需要再翻译成原码,因为无符号整型原码补码反码相同,直接补码即可!
总结:
原先数据类型决定整型提升时需要补位的数字,而输出结果如果是无符号整型,直接打印补码,不需要像有符号数那样还需要输出时将反码翻译成补码!
四、char类型表示数据范围
有符号的char范围:-128~127
无符号的char的范围:0~255
TIP:
128是存储不到char类型,但我们可以看成127+1就是-128,因此两者输出结果一样!