c语言位
A. c语言位操作
3 = B 0000 0011
6 = B 0000 0110
取或运算:任意一比特位为1,最后都运算结果都为1
所以或操作的结果为 B 0000 0111
这个比特位值为7
所以printf输出为7。
望采纳。
B. c语言中按位或|
这里涉及到的是位操作。
首先你需要了解内存中的数字存储形式(二进制)。这里的a是一个标识符,用于存储标记。具体而言,a是一个八个比特长的变量。比如0b00000000,0b00001110等等。用十六进制可以简写为0x00, 0x0E等等(这里两个例子没有任何含义)
在C语言中“<<”表示移位操作,比如0b00000001左移3位,就会变成0b00001000;左移2位就是0b00000100;等等。
然后你这里没有给出digitalRead()函数的返回类型,我认为是0或1。在这种情况下,0写成8位二进制是0b00000000,左移任何位都是0,如果是1的话,左移x位表示把从右往左数第x+1位变成1,比如:1<<3表示0b00001000,从右至左第4位变成1。
接下来,你有4个digitalRead函数,但是你想同时关心4个返回值。怎么办呢?我把第x个返回值放在从右往左数第x位上。比如0b00000110,表示第二、三个返回值是1,剩下两个返回值是0。那么你按上面的移位操作,可以得到这样4个数:
0b 0000 0000 (返回值是0)
0b 0000 0100 (返回值是1)
0b 0000 0010 (返回值是1)
0b 0000 0000 (返回值是0)
按位进行“或”操作。“或”操作你肯定明白,有1就是1,没1才是0
所以根据结果可以知道4个返回值是怎么样的。于是在switch语句中的返回值表明,如果是0x00(表示4个返回值是0),或是0x0F(4个返回值都是1)(F是4个1),则进行某种操作。
不知道明白了没?
C. C语言中什么是按位或运算
位运算是在二进制层面上进行的运算
位或就是在两个二进制上进行按位的或运算
像普通的逻辑运算一样 两个里有一个为真就返回真(逻辑真 就是1 逻辑假就是0)
比如两个十进制数 5 和 3 进行位或运算
把他们转换为二进制
5的二进制是 0101
3的二进制是 0011
他们按位或的结果是0111 转换到十进制就是0+4+2+1 是7
D. c语言位变量定义
在c语言中定义bit型变量,可以使用位域来自定义。
位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct 位域结构名
{ 位域列表 };
其中位域列表的形式为: 类型说明符 位域名:位域长度;
示例:通过位域来计算IEEE754浮点数标准中,单精度浮点数的最大值、最小值以及最小弱规范数。
#include <stdio.h>
typedef struct FP_SINGLE
{
unsigned __int32 fraction : 23;
unsigned __int32 exp : 8;
unsigned __int32 sign : 1;
} fp_single;
int main()
{
float x;
fp_single * fp_s = (fp_single *)&x;
fp_s->sign = 0;
fp_s->exp = 0xfe;
fp_s->fraction = 0x7fffff;
printf ("float 最大数: %le\n",(double)x);
fp_s->sign = 0;
fp_s->exp = 0x1;
fp_s->fraction = 0x0;
printf ("float 最小数: %le\n",(double)x);
fp_s->sign = 0;
fp_s->exp = 0;
fp_s->fraction = 0x1;
printf ("float 最小弱规范数:%le\n\n",(double)x);
return 0;
}
E. c语言里,位 字节 B都是什么关系
C语言中:
1 Byte(字节) = 8 Bit(位)
一般32位系统下
常用的变量类型,
char:1byte(8bit)
int:4byte(32bit)
short:2byte(16bit)
F. C语言位运算
按位与 | 按位或 ^
按位异或 ~ 取反 <<
左移 >> 右移<<
1. 按位与运算。按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
2. 按位或运算。按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。 例如:9|5可写算式如下: 00001001|00000101 00001101 (十进制为13)可见9|5=13 main(){ int a=9,b=5,c; c=a|b; printf("a=%d/nb=%d/nc=%d/n",a,b,c); }
3. 按位异或运算。按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12) main(){ int a=9; a=a^15; printf("a=%d/n",a); }。
5. 左移运算。左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数, 高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
G. C语言中按位与(&)运算符是什么意思
是将二进制数按照位的对应相与,得到一个新的二进制数。1与0为0;1与1为1;0与0为0。
分析如下:
就是二进制的每一位相与。
比如:1010 0011& 0000 1111,结果为0000 0011。也就是与上0相当于把那位数清0,与上1相当于把那位保留。
(7)c语言位扩展阅读:
1、按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为11111111)。
H. c语言的位表示什么
内存存储单元也就是字节应该是正确的,8位、16位是指比特,
1字节=8比特,也就是8个二进制信息。
I. C语言中位操作
首先32位系统-3默认为整形占4字节(32个位),二进制表示11111111
11111111
11111111
11111101得来方法:
3的二进制位00000000
00000000
00000000
00000011,取反补1后等到上面的值
再看下-1的二进制11111111
11111111
11111111
11111111同样是1取反后补1
下面看下移位因为第一位为1,右移时根据最高位补位,移1位后值为:
11111111
11111111
11111111
11111110
再移动1位就变成了:11111111
11111111
11111111
11111111后面不管你右移多少次始终是这个结果,所以-3右移2次以上后值就是-1了。