当前位置: 首页 > news >正文

可以做宣传的网站帝国cms网站名称

可以做宣传的网站,帝国cms网站名称,苏州建设网站平台,wordpress 团购 主题针对于嵌入式软件杂乱的知识点总结起来#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.位操作基础 2.如何求解整型数的二进制表示中1的个数 ? 3.如何求解二进制中0的个数 4.交换两个变量的值#xff0c;不使用第三个变量。即a3,b5,交换之后a5,b3: 5.给定一个…   针对于嵌入式软件杂乱的知识点总结起来提供给读者学习复习对下述内容的强化。 目录 1.位操作基础 2.如何求解整型数的二进制表示中1的个数 ? 3.如何求解二进制中0的个数 4.交换两个变量的值不使用第三个变量。即a3,b5,交换之后a5,b3: 5.给定一个整型变量a写两段代码第一个设置a的bit3第二个清除a 的bit 3。在以上两个操作中要保持其它位不变。 1.位操作基础 位操作Bitwise Operations是直接对二进制位进行操作的一类运算广泛应用于嵌入式开发、系统编程、算法设计等领域。以下是常用的位操作及其作用、示例。 按位与 () 将两个数的每个位进行与运算。 规则1 1 1其余为 0。 作用用于清零某些位提取特定位。 示例清除一个数的低 4 位 int x 0b11010101; // 213 int result x 0b11110000; // 清除低4位 printf(Result: 0x%x\n, result); // 输出: 0xd0按位或 (|) 将两个数的每个位进行或运算。 规则0 | 0 0其余为 1。 作用用于设置某些位为 1。 示例设置某数的第 3 位为 1 int x 0b11000001; // 193 int result x | 0b00000100; // 设置第3位 printf(Result: 0x%x\n, result); // 输出: 0xc5按位异或 (^) 将两个数的每个位进行异或运算。 规则相同为 0不同为 1。 作用用于翻转特定位或无进位加法。 示例翻转某数的第 3 位 int x 0b11000001; // 193 int result x ^ 0b00000100; // 翻转第3位 printf(Result: 0x%x\n, result); // 输出: 0xc5按位取反 (~) 将每个位取反0 变 11 变 0。 作用用于生成补码、求反值。 示例取反某数 int x 0b00001111; // 15 int result ~x; // 取反 printf(Result: 0x%x\n, result); // 输出: 0xfffffff0 (补码表示)左移 () 将二进制位左移低位补 0。 作用快速乘以 2 的幂。 示例将某数左移 2 位 int x 5; // 0b0101 int result x 2; // 左移2位 printf(Result: %d\n, result); // 输出: 20右移 () 将二进制位右移高位补符号位算术右移或 0逻辑右移。 作用快速除以 2 的幂。 示例将某数右移 2 位 int x 20; // 0b00010100 int result x 2; // 右移2位 printf(Result: %d\n, result); // 输出: 5在嵌入式开发中位操作非常常见以下是一些典型应用场景和代码示例 1. 控制寄存器的位操作 设置某些位 设置寄存器中某些位为 1比如配置 GPIO 为输出模式。 #define GPIO_DIR_REG (*(volatile unsigned int *)0x40020000) // 假设寄存器地址 #define GPIO_PIN_3 (1 3) // 第3位表示GPIO3void set_gpio_output() {GPIO_DIR_REG | GPIO_PIN_3; // 设置第3位为1 }清除某些位 清除寄存器中某些位为 0比如禁用某外设功能。 void disable_feature() {GPIO_DIR_REG ~GPIO_PIN_3; // 清除第3位 }2. 检测某个位的状态 判断某引脚状态 检测某引脚的高低电平。 #define GPIO_INPUT_REG (*(volatile unsigned int *)0x40020010) // 输入寄存器int is_pin_high() {return (GPIO_INPUT_REG GPIO_PIN_3) ? 1 : 0; // 检查第3位是否为1 }3. 翻转某个位 翻转 LED 状态 嵌入式中控制 LED 灯时经常需要翻转某 GPIO 的状态。 #define GPIO_OUTPUT_REG (*(volatile unsigned int *)0x40020004) // 输出寄存器void toggle_led() {GPIO_OUTPUT_REG ^ GPIO_PIN_3; // 翻转第3位 }4. 提取寄存器的特定位 获取外设状态 从状态寄存器中提取某外设的状态位。 #define STATUS_REG (*(volatile unsigned int *)0x40020020) // 状态寄存器 #define DEVICE_READY_BIT (1 7) // 第7位表示设备准备好int is_device_ready() {return (STATUS_REG DEVICE_READY_BIT) 7; // 提取第7位 }5. 多位配置操作 设置多位 一次性设置多个位比如配置多个 GPIO 为输出模式。 #define GPIO_OUTPUT_MASK (GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5)void configure_multiple_gpio() {GPIO_DIR_REG | GPIO_OUTPUT_MASK; // 设置GPIO3、GPIO4、GPIO5为1 }清除多位 清除多个位。 void clear_multiple_gpio() {GPIO_DIR_REG ~GPIO_OUTPUT_MASK; // 清除GPIO3、GPIO4、GPIO5 }6. 数据压缩与解压 压缩数据 将多个小数据合并到一个 32 位变量中。 unsigned int pack_data(unsigned char a, unsigned char b, unsigned char c, unsigned char d) {return (a 24) | (b 16) | (c 8) | d; }解压数据 从一个变量中提取多个字段。 void unpack_data(unsigned int packed, unsigned char *a, unsigned char *b, unsigned char *c, unsigned char *d) {*a (packed 24) 0xFF;*b (packed 16) 0xFF;*c (packed 8) 0xFF;*d packed 0xFF; }2.如何求解整型数的二进制表示中1的个数 ? #include stdio.hint func(int x) {int countx 0; // 计数器初始化while (x) {countx;x x (x - 1); // 清除最低位的1}return countx; }int main() {printf(%d\n, func(9999)); // 调用函数并打印结果return 0; }func 函数 用于计算输入整数 x 的二进制表示中有多少个 1。 x x (x - 1) 的作用是清除 x 中最低位的 1直到 x 变为 0。 每次清除一个 1 时countx 增加 1。 main 函数 调用 func(9999)计算 9999 的二进制表示中有多少个 1。 使用 printf 输出结果。 输出结果 9999 的二进制表示为 10011100001111其中有 8 个 1。 3.如何求解二进制中0的个数还有1的个数 #include stdio.hvoid count_ones_and_zeros(int x) {int count_ones 0, count_zeros 0;while (x) {if (x 1) {count_ones; // 如果最低位是 1} else {count_zeros; // 如果最低位是 0}x 1; // 右移一位检查下一位}// 如果 x 最后的结果为 0还需要考虑 x 可能有零填充的位// 假设我们处理的整数位数为 32 位int total_bits sizeof(x) * 8; // 通常为 32 位对于 32 位整数count_zeros total_bits - count_ones - count_zeros;printf(1s: %d, 0s: %d\n, count_ones, count_zeros); }int main() {int numbers[] {25, 15, 5};for (int i 0; i 3; i) {printf(For %d: , numbers[i]);count_ones_and_zeros(numbers[i]);}return 0; }4.交换两个变量的值不使用第三个变量。即a3,b5,交换之后a5,b3: #include stdio.hint main() {int a 3, b 5;printf(Before swap: a %d, b %d\n, a, b);a a b; // a 变为 8 (3 5)b a - b; // b 变为 3 (8 - 5)a a - b; // a 变为 5 (8 - 3)printf(After swap: a %d, b %d\n, a, b);return 0; }a a ba 保存了 a 和 b 的和。 b a - bb 通过从 a 的和中减去原来的 b 值得到原来的 a 值。 a a - ba 通过从和中减去新的 b 值得到原来的 b 值。 #include stdio.hint main() {int a 3, b 5;// a 0011 b 0101printf(Before swap: a %d, b %d\n, a, b);a a ^ b; // a 变为 6 (3 ^ 5) 0011 0101 - 0110b a ^ b; // b 变为 3 (6 ^ 5) 0110 0101 - 0011a a ^ b; // a 变为 5 (6 ^ 3) 0110 0011 - 0101printf(After swap: a %d, b %d\n, a, b);return 0; }a a ^ ba 变成了 a 和 b 的异或值。 b a ^ bb 通过异或 a当前是 a ^ b得到原来的 a 值。 a a ^ ba 通过异或 b当前是原来的 a 值得到原来的 b 值。 5.给定一个整型变量a写两段代码第一个设置a的bit3第二个清除a 的bit 3。在以上两个操作中要保持其它位不变。 #include stdio.h #define BIT3 (13) static int a5; void Set_Bit3(void){a | BIT3; } void Clear_Bit3(void){a ~BIT3; } int main() {Set_Bit3();Clear_Bit3();printf(%d,a);return 0; }假设 a 的初始值为 5其二进制为 00000101 初始值打印5 设置第3位后 BIT3 1 3 00001000 a | BIT3 00000101 | 00001000 00001101结果为 13 打印13 清除第3位后 ~BIT3 ~00001000 11110111 a ~BIT3 00001101 11110111 00000101结果为 5 打印5
http://www.w-s-a.com/news/377854/

相关文章:

  • 陕西旭泽建设有限公司网站企业网站建设软件需求分析
  • 上海公司网站建设方案中企动力西安分公司
  • dedecms网站后台怎样才能上百度
  • 云互联的网站名字亚马逊雨林生物
  • 电商网站功能企查查企业信息查询网
  • 特色网站建设中国住房和城乡建设局官网
  • 长春市住房城乡建设厅网站做白酒网站
  • 自己的网站怎么做的成品免费ppt网站
  • 番禺区网站建设哪里有泰安公司
  • 网站制作详细过程网站开发最强工具
  • 孟村县做网站长春城投建设投资有限公司网站
  • 国家重大建设项目库网站wordpress安装 var
  • 供求信息网站建设报价网站制作 苏州
  • 动漫建模代做网站百度一下wordpress nginx 固定链接
  • 广州网站开发网络公司网站建设的书
  • php手机网站开发教程家政网站怎么做
  • 视频网站的建设预算通信科技网站设计
  • 糖果网站建设策划书淘宝客网站开源
  • 建站公司还有前途吗cf网站编程
  • 网站建设需求确认表建站工具 比较
  • 刚建设的网站多久能在百度查到考试系统 微网站是什么样的
  • 商城网站建设高端企业网站建设劣势
  • 网站建设征集通讯员的通知seo推广外包
  • 微信公众号微网站建设专业网站建设出售
  • 怎么用wordpress建立自己的网站加强校园网站建设
  • 用什么做网站后台的织梦网站怎么上传
  • 怎么获取网站数据做统计百度快照推广有效果吗
  • 淘宝领卷网站什么做制造网站开发
  • 如何做com的网站网站建设投标书模板
  • 郑州网络营销网站优化网站技术方案怎么写