【c语言】实现对一个8bit数据(unsigned char 类型)的指定位(例如第n位)置0或者置1操作,并保持其他位不变

// 实现对一个8bit数据(unsigned char 类型)的指定位(例如第n位)置0或者置1操作,并保持其他位不变

#include <stdio.h>

void bit_set(unsigned char *p_data, unsigned char position, int flag)
{
	unsigned c;
	unsigned char a = 1;
	a = a << (position - 1);
	if (flag == 1)
	{
		*p_data = *p_data | a;
	}
	else
	{
		c = ~a;
		*p_data = *p_data & c;
	}
}

int main()
{
	int pos;
	int flag;
	unsigned char P_data;
	printf("please enter the number:");
	scanf("%d", &P_data);
	printf("please enter the position:");
	scanf("%d", &pos);
	printf("please enter the flag(0 or 1):");
	scanf("%d", &flag);
	bit_set(&P_data, pos, flag);
	printf("the number is %d\n", P_data);
	return 0;
}

<img src="http://img.blog.csdn.net/20150519232954164?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

时间: 2024-12-26 20:49:48

【c语言】实现对一个8bit数据(unsigned char 类型)的指定位(例如第n位)置0或者置1操作,并保持其他位不变的相关文章

【C语言】请编写实现以下功能函数:实现对一个8bit数据(unsigned char)的指定位(例如第8位)的置0或置1操作,并保持其他位不变

/*请编写实现以下功能函数:实现对一个8bit数据(unsigned char)的指定位(例如第8位)的置0或置1操作,并保持其他位不变. 函数原型:void bit_set(unsigned char *p_date,unsigned char position,int flag). 函数参数说明:p_date是指定数据源,position是指定位(1~8),flag是置0或置1. */ #include <stdio.h> void bit_set(unsigned char *p_dat

【C语言】实现对一个8bit数据的指定位的置0或者置1操作,并保持其他位不变。

给定函数原型:void bit_set(unsigned char *p_data,unsigned char positin,int flag) 参数说明:p_data是指定的源数据:position是指定位(取值范围为1~8):flag表示置0还是置1操作. #include <stdio.h> void bit_set(unsigned char *p_data, unsigned char position, int flag) { int a = 1<<(position

unsigned char 类型

在蓝牙4.0的开发中,很多数据类型都用到了 unsigned char ,我觉得用这个类型的一个原因是相比较于整型,它占的空间更少. 比如: unsigned char a = 1;  // 占1个字节 int a = 1;    // 占2个字节 --------------------------------------separation-------------------------------------------- 值得注意的是,类型之间的计算要理清.对于 unsigned ch

数据库unsigned char*类型图片存进

loadimage1();测试: void Caccess_test_1Dlg::loadimage1()//存入unsigned char*类型的数据图片 { CFileException e; Invalidate(); //输入图片测试 CString sFilePathName = L"D:\\bridge.bmp"; m_Pic.Load(sFilePathName); BOOL bResult = FALSE; CFile f; //int nSize = 0; if (m

【C语言】编写函数,将一个数的指定位置置0或置1

//编写函数,将一个数的指定位置置0或置1 #include <stdio.h> unsigned int set_bit(unsigned int num, int pos, int flag) { int n = 1; n = n << (pos - 1); //将n的第pos位置1,其它全为0 if (flag == 0) { num = num&(~n); } else if (flag == 1) { num = num | n; } else printf(&q

hibernate查询数据表char类型字段只返回一个字符

在oracle或sqlServer下会遇到,查询数据表字段类型为char,如果使用Hibernate原生SQL去执行查询,往往只会返回 一个字符.原因是char在java中只有两个字节. 解决方法 1.改成 select cast(列 as varchar2(列大小)) from 表;或者改为 select trim(列) from 表 2.指定列返回的类型. SQLQuery query = session.createSQLQuery(); query.addScalar(columnAli

C语言:实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数,如+1234输出1234

#include<stdio.h> int my_atoi(char s[])     /*字符串转换函数*/ {  char* p = s;  int flag = 1;  int ret = 0;  if(*p=='-')  {   flag=-1;     }     if((*p=='+')||(*p=='-'))     {      p++;      }  while(*p!='\0')   {   if((*p>='0')&&(*p<='9'))  

C语言 —— 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

此文章参考<深入理解计算机系统>P31. 先看如下代码:  12345的十六进制表示为:0x00003039 1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 12345; 6 char *q = (char *)(&a); 7 for(int i = 0; i < sizeof(a); ++i) 8 printf("%.2x ", q[i]); 9 return 0; 10 } 输出为: a的地址

c语言中 char* 和 unsigned char* 的区别浅析(转)

原文:https://blog.csdn.net/guotianqing/article/details/77341657 背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用时作为函数的unsigned char*类型的参数调用.这个警告很容易避免,但是char*和unsigned char*到底有什么区别呢,本文作一个简单的探讨. char 和 unsigned char 的区别在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的.