题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果

最高位和最低位默认为1
这个题目当时真的成功地恶心到我了,没精力解释了,自己看代码吧

具体的解释,代码中注释已给出
若有不懂,可以给我留言,我会尽快回复。

/** 输入一个32位的整数a,使用按位异或^运算,* 生成一个新的32位整数b,使得该整数b的每一位* 等于原整数a中该位左右两边两个bit位的异或结果* 这是一个麻烦的问题!!! */
#include <stdio.h>
#include <stdlib.h>
void set_number(int n, int *n_);                 //输入原数,按题目输出目标数字
void set_target(int *n, int target, int set_);    //把相应的target位置为set_(0或1)
void print_number(int n, int r_start, int r_end);      //从start到end打印出n的二进制形式
int main()
{int n;int n_;printf("输入一个32位整数,生成一个新的32位整数,使得该整数的每一位等于\n原整数的该位左右两bit位异或的结果\n");printf("生成的新的数最两边默认为1\n");printf("请输入一个数:");scanf("%d", &n);printf("%d\t的二进制位:", n);print_number(n, 0, 31);set_number(n, &n_);printf("  修改后的二进制位:");print_number(n_, 0, 31);return 0;}
void print_number(int n, int r_start, int r_end)
{int flag = 1;int i;for (i = r_end; i >= r_start; i--){flag = flag << i;             //flag移到相应位if (flag & n)          //判断相应位是1还是0printf("1");           //若为1打印1,否则打印0elseprintf("0");flag = 1;}printf("\n");
}
void set_number(int n, int *n_)
{int flag1 = 1, flag2 = 1;*n_ = 1;*n_ = (*n_ << 31) + 1;for (int i = 1; i <= 30; i++){flag1 = flag1 << (i - 1);     //flag1移位到相应位,测相应位的值,取出n的左右相邻两位的值flag1 = flag1 & n;         //测为1或0flag2 = flag2 << (i + 1);flag2 = flag2 & n;flag1 = flag1 ^ (flag2 >> 2);   //flag1,flag2异或后的结果存在flag1里面if (flag1 != 0) flag1 = 1;    //flag1若不为0,则置1,只需要判断flag1是否为1就行了set_target(n_, i, flag1);    //之前范的错误就是flag1传过去的不是1,但是set_只能为0或1flag1 = 1;flag2 = 1;}
}
void set_target(int *n, int target, int set_)
{int flag = 1;    //(think about it.)      flag = flag << target;   //测要修改的位为1还是0if (*n & flag){if (set_ == 1)        //若原来这个位为1,设置为1,则set_需要取反set_ = 0;else     //若原来这个位为1,设置为0,set_也需要取反set_ = 1;}flag = set_;flag = flag << target;  //相应的位修改为set_,准备修改数n的目标位 *n = *n ^ flag;
}

整数按位异或运算 C语言相关推荐

  1. c语言中按位或与按位异或的区别,C:按位与、按位或、按位异或运算

    一.按位与 & 1.概念:参加运算的两个对象,按二进制位进行"与"运算,负数按补码形式参加按位与运算. 2.规则 0&0=0; 0&1=0; 1&0 ...

  2. c语言 按位异或,C:按位与、按位或、按位异或运算

    一.按位与 & 1.概念:参加运算的两个对象,按二进制位进行"与"运算,负数按补码形式参加按位与运算. 2.规则 0&0=0; 0&1=0; 1&0 ...

  3. c语言任意两个整数相减_大整数加减运算的C语言实现

    大整数加减运算的 C 语言实现 一 . 问题提出培训老师给出一个题目:用 C 语言实现一 个大整数计算器.初步要求支持大整数的加.减运算,例如 8888888888888+1112=888888889 ...

  4. c语言带括号整数四则混合运算,带中括号整数四则混合运算练习题.doc

    带中括号整数四则混合运算练习题 精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 带中括号整数四则混合运算练习题 540÷﹙30×15÷50﹚× ...

  5. c语言中按位异或运算,^按位异或运算符

    ^表示按位异或运算符,顾名思义,相异,即不同则为1,反之为0 例如15和16进行异或运算,运算过程如下:15 0000 0000  0000 0000  0000 0000  0000 1111 16 ...

  6. C语言 按位异或运算

    按位异或运算: 规律:无论0或1,异或1取反,异或0不变 变量交换: 题一:给定两个数 a 和 b ,用异或运算交换它们的值. 思路: 1)中间量t = a^b 2) b = tb,相当于abb,根据 ...

  7. c语言提供了6个位运算,C语言基础丨运算符之位运算符(六)

    对于更多紧凑的数据,C 程序能够用独立的位或多个组合在一块儿的位来存储信息.文件访问许可就是一个常见的应用案例.位运算符容许对一个字节或更大的数据单位中独立的位作处理:能够清除.设定,或者倒置任何位或 ...

  8. c语言怎么将两个整数变量值交换,C语言如何利用异或进行两个值的交换详解

    C语言异或运算 位运算符家族中,最常用的,某过于异或运算符. 异或运算符是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1.即:0^0=0, 1^0=1, 0^1=1, 1^1=0 例 ...

  9. c语言 高字节和高字节运算 低字节和低字节运算,C语言关系运算符和位运算符.ppt...

    <C语言关系运算符和位运算符.ppt>由会员分享,可在线阅读,更多相关<C语言关系运算符和位运算符.ppt(42页珍藏版)>请在装配图网上搜索. 1.第3章 关系运算符和位运算 ...

最新文章

  1. Java多线程:Semaphore
  2. Autograd:自动求导
  3. linux——DHCP的配置问题
  4. C#中对象的序列化与反序列化
  5. 大数据领域可以应聘的岗位
  6. E百科 | 第2期 扒一扒能加速互联网的QUIC协议
  7. 【Java】图解 Spring 循环依赖,写得太好了
  8. pthread线程传递数据回主线程_操作系统4:线程(1)
  9. Android FrameWork——PackageManager框架
  10. 逆天通用水印扩展篇~新增剪贴板系列的功能和手动配置,卸除原基础不常用的功能...
  11. ENVI5.4中Himawari-8数据处理(向日葵8号卫星H-8)
  12. PolSARpro导入外部极化矩阵数据(以高分三号为例,附格式转化代码)
  13. Jconsole小记
  14. Java 文件上传同时携带参数
  15. 裁员潮,互联网寒冬的黑暗时刻
  16. MacOS安装Photoshop2022提示错误代码107(Error Code: 107)(更新)
  17. 构建新型现代化智慧博物馆之物联网环境监控方案
  18. Java字节流读取shp_shp系列(四)——利用C++进行Shx文件的读(打开)
  19. 服务器文件夹temp,服务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因及解决...
  20. java如何jasper_java – 如何以编程方式打印Jasper报告

热门文章

  1. JAVA程序设计:追逐游戏(LCP 21)
  2. JS_js判断当前是否是微信浏览器,判断移动端浏览器类型,微信浏览器、支付宝小程序、微信小程序等
  3. sql 函数执行动态sql_什么是SQL函数?
  4. java练习之生成随机数1-10,如果是1输出“恭喜,中1等奖”,如果是2输出“恭喜,中2等奖”,如果是3输出“恭喜,中3等奖”,如果是4输出“恭喜,中4等奖”,如果是5输出“恭喜,中5等奖
  5. 确保移动应用成功的16项指标
  6. 实现VR直播的关键技术
  7. 助力中文文字识别突破,美团公开首个真实场景招牌图像数据集 1
  8. fastapi_No.23_事件_启动和关闭事件
  9. Android Compose 沉浸式状态栏
  10. java 8583报文解析_8583报文解析实例