2个小编程题(字节多少位为1,判断LSB or MSB)
2015-09-18 21:53
281 查看
1计算一个字节里有多少个bit被置1,多少位被置换为0:
*if( ( (x>>i) &1)==1) 这里我们需要判断优先级的时候最好是多加个括号,这样谁都看得懂了,其实&有2个意思,一个是取地址,一个是位运算,这里是取地址是比==低的,所以我们需要打上括号
2. 写一个函数,判断是小端字节序(LSB)还是大端字节序(MSB);
解释一下(*(char *)&test):首先看到这句,应该从test开始着手,取整形变量test的地址&test,再将此地址强制类型转换成字符指针类型(char *)&test,那么读取这个地址的时候就只读取一字节的内存块数据,即之前的四字节整型内存块被截断,且这一字节的地址在这四字节中就是最低地址,最后取这一字节内存块的数据*(char
*)&test。如果是Little endian,则保存1的那一位必定在这一字节中而且用%d打印出来的值也是1。如果是Big endian,则保存1的那一位必定不在这一字节中而且这一字节中的每位都是0,用%d打印出来必定是0
int chek_byte_1(char x) { int i,count_1=0; for(i=0;i<8;i++) { if(((x>>i)&1)==1) count_1++; } return count_1; } int chek_byte_0(char x) { int i,count_0=0; for(i=0;i<8;i++) { if(((x>>i)&1)==0) count_0++; } return count_0; }
*if( ( (x>>i) &1)==1) 这里我们需要判断优先级的时候最好是多加个括号,这样谁都看得懂了,其实&有2个意思,一个是取地址,一个是位运算,这里是取地址是比==低的,所以我们需要打上括号
void main() { char num=16; printf("%d has bit 1= %d,bit 0=%d \n",num,chek_byte_1(num),chek_byte_0(num)); }
2. 写一个函数,判断是小端字节序(LSB)还是大端字节序(MSB);
#include <stdio.h> int main() { int test = 1; if(*(char *)&test) printf("Little endian byte order!\n"); else printf("Big endian byte order!\n"); return 0; }
解释一下(*(char *)&test):首先看到这句,应该从test开始着手,取整形变量test的地址&test,再将此地址强制类型转换成字符指针类型(char *)&test,那么读取这个地址的时候就只读取一字节的内存块数据,即之前的四字节整型内存块被截断,且这一字节的地址在这四字节中就是最低地址,最后取这一字节内存块的数据*(char
*)&test。如果是Little endian,则保存1的那一位必定在这一字节中而且用%d打印出来的值也是1。如果是Big endian,则保存1的那一位必定不在这一字节中而且这一字节中的每位都是0,用%d打印出来必定是0
相关文章推荐
- C语言 --- 高级指针
- 结对编程
- spring配置文件各个属性详解
- PHP版本中的VC6,VC9,VC11,TS,NTS区别
- 京东校招编程题——小熊分苹果
- atitit.为什么技术的选择方法java超过.net有前途
- qt中出现库函数无法解析的外部符号
- Scala并发编程实战初体验及其在Spark源码中的应用解析之Scala学习笔记-56
- java全局鼠标键盘监听
- java 多线程同步
- struts2 constant配置详解
- 初识 Struts2 (HelloWorld)
- 自学QT之实现窗口移动
- 重学C++Primer笔记5---一些基本语法需要特别注意的地方
- python 3.3.2报错:No module named 'urllib2'
- python 3.3.2报错:No module named 'urllib2'
- python下libsvm的使用
- 求满足 Str1<Str<Str2 且 0<Str.length <=len 的字符串个数
- 内存四区解析
- 从eclipse导出,Android Studio导入项目过程出现的各种问题总结