C语言学习历程——Training02位运算05
2017-04-29 21:19
148 查看
5. 题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b;
使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
分析:按照题意处理,具体代码中有解释下面是代码实现:
/********************************************************************
输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b;
使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
********************************************************************/
#include <stdio.h>
int Change(int a, int b)
{
int i = 0;
for (i = 0; i < 32; i++)
{
if ((i == 0) || (i == 31))
{
b += (((a >> i) & 1) ^ 0) << i;
//开头和结尾单独处理
}
else
{
b += (((a >> (i + 1)) & 1) ^ ((a >> (i - 1)) & 1)) << i;
//第i位的结果等于该位左右两个位异或的结果
}
}
return b;
}
int main()
{
int a = 0;
int b = 0;
printf ("please input a integer:");
scanf ("%d", &a);
b = Change(a , b);
printf ("b = %d\n", b);
return 0;
}
相关文章推荐
- C语言学习历程——Training02位运算03
- C语言学习历程——Training02位运算02
- C语言学习历程——Training02位运算04
- 【语言学习日志】大家的日语初级第一册05
- 汇编语言学习历程(一)分支、循环控制
- [BX]和loop指令05 - 零基础入门学习汇编语言27
- [BX]和loop指令05 - 零基础入门学习汇编语言27
- 寄存器(CPU工作原理)05 - 零基础入门学习汇编语言10
- JAVA语言学习_05(关于continue和break)
- Call指令和Ret指令讲解05 - 零基础入门学习汇编语言52
- Call指令和Ret指令讲解05 - 零基础入门学习汇编语言52
- java语言学习历程小结(三)
- JAVA语言学习笔记之运算和语句
- java语言学习历程小结(四)
- 学习新语言等技能的历程
- 【基础语言学习】C#中的可空类型运算(Nullable<T>)------T?
- 基础知识05 - 零基础入门学习汇编语言05
- 基础知识05 - 零基础入门学习汇编语言05
- 更灵活的定位内存地址的方法05 - 零基础入门学习汇编语言36
- java语言学习历程小结(二)