2个小编程题(字节多少位为1,判断LSB or MSB)
来源:互联网 发布:拼团网源码 编辑:程序博客网 时间:2024/04/28 04:12
1计算一个字节里有多少个bit被置1,多少位被置换为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
0 0
- 2个小编程题(字节多少位为1,判断LSB or MSB)
- spi MSB first or LSB first
- MSB LSB (大小端)
- 大端小端与MSB和LSB
- MSB LSB
- LSB,MSB
- LSB,MSB
- LSB最低有效位和MSB最高有效位
- LSB最低有效位和MSB最高有效位
- 大端小端与LSB和MSB的小故事
- MSB LSB 大端 小端 Big-Endian Small-Endian
- PCM 数据中的大/小端 与 MSB/LSB
- 什么是LSB,MSB
- LSB和MSB
- MSB与LSB
- 什么是MSB/LSB码?
- MSB and LSB
- LSB、MSB是什么单位
- 初识 Struts2 (HelloWorld)
- First Bad Version
- 京东笔试题---年终奖
- 做国际项目时候,处理翻译的国际化资源文件的java代码
- 使用UIImageView实现动画
- 2个小编程题(字节多少位为1,判断LSB or MSB)
- http 的get,put,post,delete
- 字符的三种写入 小程序
- UI11_手势
- 欧拉函数
- Java学习笔记09 IO
- 技术人生:故事之四MS是微软
- http content-type
- error while loading shared libraries