首页 > 其他 > 详细

CPU

时间:2021-04-30 10:48:20      阅读:18      评论:0      收藏:0      [点我收藏+]

1.大小端

内存高地址:地址越大

内存低地址:地址越小

数据高低字节:左高右低

小端模式:高地址存高字节

大端模式:高地址存低字节

例如:存储0x1234这个数

技术分享图片

2.大小端判断:

int i=oX0000 0111; //等价于0000 0000 0000 0000 0000 0001 0001 0001,等价于int i=273

大小端判断代码

int main(){                                                                                              
  int value=0x00000101;                                                                                                                                                                                        
  char *p=(char *)&value;       //转化为char型指针,会截取value指针的首字节存进p中                                                                                     
  if(*p==0x01){                                                                                                          
    cout<<"small"<<endl;                                                                                                 
  }else{                                                                                                                 
    cout<<"big"<<endl;                                                                                     
  }                                                                                                   
return 0;                                                                                            
}

 3.进制

char a[2]={0X01,0X11}; //char型1字节,共8bit,16进制需要用2位表示。

int i=0X1111 0001;    //int4字节,共32bit,需要用8位16进制表示。

4.&与&&区别

1、&表示按位与操作。

2、&&表示逻辑与的意思,即为and。

区别二:程序执行的时候不同

1、当运算符&&两边的表达式的结果都为true时,整个运算结果才为true

2、我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

或者Oxff截取int型最低字节。

int main(){
int f=0x00110011;
printf("%x",f&0xff);         //ox11
printf("%x",f>>8&0xff);      //ox00
printf("%x",f>>16&0xff);     //ox11                                                 
return 0;                                                                                                                          
}

case练习:uint32_t型编码为4字节的char型

void EncodeFixed32(char* buf, uint32_t value) {                                           
  buf[0] = value & 0xff;
  buf[1] = (value >> 8) & 0xff;
  buf[2] = (value >> 16) & 0xff;                                                          
  buf[3] = (value >> 24) & 0xff;                                                          
}                                                                                         

int main(){                                                                               
char c[4];
EncodeFixed32(c,285217041);   //285217041等价于0x11001111                                                           

printf("c[0]: %x",c[0]);  //c[0]: 11                                                                
cout<<endl;
printf("c[1]: %x",c[1]);  //c[1]: 11                                                              
cout<<endl;
printf("c[2]: %x",c[2]);  //c[2]: 0                                                               
cout<<endl;
printf("c[3]: %x",c[3]);  //c[3]: 11                                                                

return 0;                                                                                                                          
}
//最终c数组内:11110011,正好与输入的整数字节位相反,适合大端机的转换。

 

CPU

原文:https://www.cnblogs.com/liuweiweitju/p/14720368.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!