当前位置:首页 » 编程语言 » c语言位运算置位是什么意思
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言位运算置位是什么意思

发布时间: 2022-05-23 05:45:46

c语言什么是位运算

C语言是为描述系统而设计的,它的第一个应用就是UNIX操作系统的设计,因此必须具有低级语言的特点。指针运算和位运算就是其代表。计算机中的信息以及控制信号均是以二进制码的0、1的形式存储和处理的。每一个0或1称为一个“位”(bit),8位构成一个字节(byte)。在内存中,每一个字节均有一个编号,称为内存地址。 在以前的各章节中,都是将一个字节(如字符型)和若干字节(如整型、实型等)中的内容作为一个整体进行处理的(赋值、运算、I/O操作)。 位运算则是针对这些字节中的若干位进行操作。这在系统软件设计中和自动控制中是十分有用的。

② C语言中“按位运算符”是什么意思

1、按位运算符就是直接对整数在内存中的二进制位进行操作运算。比如,&&运算本来是一个逻辑运算符,但整数与整数之间可以用&进行运算。举个例子,6的二进制是110,11的二进制是1011,那么6 & 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。

2、C语言提供了六种按位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移

③ 用位运算对变量指定位置位(求C语言代码)

置位的意思是置 1,我以变量字节数最大为 4 字节为例,你可以定义一个掩码(你可以扩展这个掩码至 64 位),再定义一个函数,实现指定的数与对应的掩码进行位或运算即可。如:

#include<assert.h>
#include<stdio.h>

unsignedintdwMasks[]={
0x00000001,0x00000002,0x00000004,0x00000008,
0x00000010,0x00000020,0x00000040,0x00000080,
0x00000100,0x00000200,0x00000400,0x00000800,
0x00001000,0x00002000,0x00004000,0x00008000,
0x00010000,0x00020000,0x00040000,0x00080000,
0x00100000,0x00200000,0x00400000,0x00800000,
0x01000000,0x02000000,0x04000000,0x08000000,
0x10000000,0x20000000,0x40000000,0x80000000,
};

unsignedintset_bit(unsignedintvalue,intnIndex)
{
assert(nIndex>=0&&nIndex<32);
returnvalue|dwMasks[nIndex];
}

intmain()
{
printf("set_bit(100,0)=%u ",set_bit(100,0));
printf("set_bit(100,1)=%u ",set_bit(100,1));
printf("set_bit(100,2)=%u ",set_bit(100,2));
printf("set_bit(100,3)=%u ",set_bit(100,3));
printf("set_bit(100,4)=%u ",set_bit(100,4));
printf("set_bit(100,5)=%u ",set_bit(100,5));

return0;
}

Linux 下编译及测试结果如下:

[root@iZ25a38chb4Ztest]#g++test.cpp-g3-Wall-otest
[root@iZ25a38chb4Ztest]#./test
set_bit(100,0)=101
set_bit(100,1)=102
set_bit(100,2)=100
set_bit(100,3)=108
set_bit(100,4)=116
set_bit(100,5)=100

100 的二进制表示为:1100100, 第 2 位和第 5 位本来就为 1,所以置 1 后结果仍然为原来的数。

以上这种方法叫查表法,通常应用于实际项目开发中,效率非常之高。

④ c语言位运算是什么

运算:C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。

在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。

当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则就会显得十分重要。

运算符号:

比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补0)位移。

例如,将11100011右移3比特,算术右移后成为11111100,逻辑右移则为00011100。因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。

运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。

⑤ 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)。

⑥ 关于C语言中的位运算。

位运算能使c具有汇编的某些能力
比如提高运算速度啊 和硬件更好的偷情啊 节约存储空间什么的 等等
比如说吧
像楼上的直接移位就比使用/运算符快些哈

⑦ c语言置位操作

对不起确实没看清题,修改一下:

state |= 0x400; //将第10位用bitwise or置位
state &= ~(0x8000); //将第15位用bitwise and清除,因为state的类型不详,先用~将0x8000取反
printf( "state第10位的值为%d.", (state & 0x400 ?1:0) ); //用and提取第10位

另外,我这里printf输出是1,还请检查是否键入正确,如果不对,请试试将其中 state & 0x400 用括号括住,即 printf( "state第10位的值为%d.", ((state & 0x400)?1:0) );

或者采用移位的方法,即 printf( "state第10位的值为%d.", state>>10) );

⑧ C语言中的位运算在编程中有什么意义啊!

特定情况下 计算方便,速度快
比如网络地址的计算,

IP1: 192.168.0.11
IP2: 192.168.0.51
mask: 255.255.255.0

数据分别用了4个字节来表示,当你想计算子网地址的时候就用 “MASK 逻辑或 IP” 运算, 得出 IP1 和 IP2 属于同一个子网,
当你想算这两个地址自身的时候,就用 逻辑与 运算,
如果用算数方法 速度慢 逻辑复杂
而且在单片机的情况下,有的复杂算数指令不一定支持的很好,但是位运算,就是基本逻辑运算,是99.9999% 的芯片都支持的

⑨ C语言中的位运算是干什么的

通常在遇到BYTE运算问题时要用.

例如GIF image 文件中的"屏幕定义块"中的第5个字节(BYTE) 是 "packed Fields",
最高位1个Bit是有无全局调色盘标志位.
接下来3个Bit是分辩率
接下来1个Bit是调色盘颜色是否安出现频繁程度分过类的标志位.
最低的3个Bit是调色盘颜色表数组大小.

unsigned char packed_Fields;
int flag_G; // 标志位的值
int size; // 颜色表数组大小

// 计算有无全局调色盘标志位的值:
flag_G = (int) ((packed_Fields & 0x80) >> 7);
[用按位与,取出最高位,右移七位到个位数的位置.]

// 如果有全局调色盘,则 计算颜色表数组大小,以便下一步动态分配调色盘RRGGBB数组:
if (flag_G == 1){
size = (int) (packed_Fields & 0x07);
// [用按位与,取出最低的三位]
};