C语言基础 -13 运算符 - 特殊用法和位运算的重要意义

强制转换,转换的是中间过程,变量本身并没有发生改变

wesley@wesley-VirtualBox:~/c/minipro_extern$ cat op2.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
        int i = 0, j = 10, value;

        int a;
        float f = 3.9;
        a = (int)f;
        printf("a = %d\n",a);
        printf("f = %f\n",f);
        exit(0);
}


wesley@wesley-VirtualBox:~/c/minipro_extern$ make op2
cc     op2.c   -o op2


wesley@wesley-VirtualBox:~/c/minipro_extern$ ./op2
a = 3
f = 3.900000

C语言不支持二进制直接赋值,只可看到8进制/10进制/16进制的效果

如下位运算,以二进制位为单位进行运算

i << 1  相当于乘以2

i >> 1  相当于除以2

~i         按位取反

I            按位或

&           按位与

^            按位异或

第2位置1:      1左移2位,在后面第0位与第1位补0; 或运算

第2位清零:      1 左移2位,再取反,然后做与运算

 

取出一个字节中的某几位,以10110111为例。

从左向右地第n位

取出第五位(第n位):10110111 & 00001000(即0x08),得到00000000,再右移三位(>>3),表达式:(data & 0x08) >> 3;

取出前四位:10110111 & 11110000(即0xf0),得到10110000,再右移四位(>>4),表达式:(data & 0xf0) >> 4;

取出后四位:10110111 & 00001111(即0x0f),得到00000111,表达式: data & 0x0f;

取第三到七位(第n到m位):10110111 & 00111110(0x3E),得到00110110,再右移一位(>>1),表达式:(data & 0x3E) >> 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值