强制转换,转换的是中间过程,变量本身并没有发生改变
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;