C语言置位函数 c语言定位函数

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

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

为资阳等地区用户提供了全套网页设计制作服务,及资阳网站建设行业解决方案。主营业务为成都网站设计、成都做网站、资阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

#include assert.h

#include stdio.h

unsigned int dwMasks[] = {

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,

};

unsigned int set_bit(unsigned int value, int nIndex)

{

assert(nIndex = 0  nIndex  32);

return value | dwMasks[nIndex];

}

int main()

{

printf("set_bit(100, 0)=%u\n", set_bit(100, 0));

printf("set_bit(100, 1)=%u\n", set_bit(100, 1));

printf("set_bit(100, 2)=%u\n", set_bit(100, 2));

printf("set_bit(100, 3)=%u\n", set_bit(100, 3));

printf("set_bit(100, 4)=%u\n", set_bit(100, 4));

printf("set_bit(100, 5)=%u\n", set_bit(100, 5));

return 0;

}

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

[root@iZ25a38chb4Z test]# g++ test.cpp -g3 -Wall -o test

[root@iZ25a38chb4Z test]# ./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语言置位操作

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

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.", state10) );

公布自编的几个C语言位操作函数

1 测试指定的位

unsigned char BitTst(unsigned char *Pa,char b)//Pa为被测试的对象的地址,b值为指定的位

{

return *Pa  (1b);

}

用法:

unsigned char x,y;

y=0x4F;

x=BitTst(y,3);

2 将指定的位置“1”

void BitSet(unsigned char *Pa,char b)//Pa为置位对象的地址,b值为指定的位

{

*Pa|=1b;

}

用法:BitSet(x,6);

3 将指定的位清“0”

void BitClr(unsigned char *Pa,char b)//Pa为清零位对象的地址,b值为指定的位

{

*Pa=~(1b);

}

用法:BitClr(x,6);

4 将指定的位取反

void BitCpl(unsigned char *Pa,char b)//Pa为取反位对象的地址,b值为指定的位

{

*Pa^=1b;

}

置位和复位指令是什么?

置位和复位指令说明如下。

置位指令就是让数字电路一个GPIO输出为高电平。汇编一般是SET指令。

复位指令就是让数字电路一个GPIO输出为低电平。汇编一般是RST指令。

置位即置1,复位即置0。置位和复位指令可以将位存储区的某位开始的一个或多个(最多可达255个)同类存储器位置1或置0。大多用来控制外部电路的通和断,或者产生一些固定的波形。

说明学习编程的过程,就是一个了解工具,学习使用工具,理解工具作用原理,改装乃至发明工具的过程。它不像你学写字,会写字之后,用什么笔,用什么纸,你都能写字来表达。所以入门学编程,最好的方式就是上机写代码做习题,做项目,得把这个工具具体实际的用起来,而不单单是买书看书做笔记。只看说明书,是很难完全学会使用工具的。当然C语言是入门的基础。

高手解释一下arm公司给出的置位操作函数(C语言代码)

bwXXXX是你需要设置的那个数的位数

bsXXXX是你需要设置的数需要左移的位数

比方说现在有一个数是0x12345678;

你想把8-11位设置为3,那么

bw就是4(8-11是4位数)

bs就是8,因为是从bit8开始,所以要左移8位

#define bwTEST 4

#define bsTEST 8

那么

INT i=0x12345678;

SET_BITS(i, TEST, 3);

c语言位运算里的“置位”是怎么回事呀?怎么用?

置位 就是把这位置于1或者0 一般都是1。

对某一位进行操作。大多时和硬件打交道的场合


分享标题:C语言置位函数 c语言定位函数
网页地址:http://scyanting.com/article/hgjdcj.html