位运算与及大小端机

位运算与及大小端机
位运算:
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值