位运算与及大小端机

来源:互联网 发布:北京java培训 编辑:程序博客网 时间:2024/06/02 03:28
位运算与及大小端机
位运算:
1,按位与(&),按位或(|),按位异或(^),按位取反(~),左移(a<<b),带符号右移(>>),java中还存在无带符号右移(>>>)
a & b 的话就是将a和b转化成二进制按位来,当两个都是1是就去1,有一个0就取零;
a | b 的话就是将a和b同样处理,当两个中有一个1,就去1;
a ^ b就是二进制按位来,当两个不一样时就取1,一样时就取零;
 ~a就是按二进制位,挨个取反;
a << b就是a的二进制按位向左移动b位,相当于乘以2的b次方;
a >> b也是同一个道理,相当于除于2的b次方;(符号位一起)
a >>> b也是右移,不过不带符号。。。
大小端机
1,大端机就是高位在前(低地址),小端机就是地位在前(低地址);
小端机:小端机的优点在于强制转换,比如unsigned long long -> unsigned char直接取低地址的就完成了任务,不需要遍历完整个数据;
大端机:大端机的优势体现在数据传输方面,在数据传输的时候,从低地址开始传输,传输以为就记录一位,然后以后每一位传过来直接位运算左移,大大提升了效率。
然后要说下机器是大小端机哪一种的判断:
#include <stdio.h> 
int main(){
unsigned int data, *point;
point = &data;//point指针指向存储data的空间
*point = 0x12;//
if(0x12 == data){
printf("Little-endian\n");
}
else if(0x00000012 == data){
printf("Big-endian\n");
}
else{
printf("Unable to determine\n");
}
return 0;
}
很明显这是在使用不同的数表示方式进行检测。
0 0