【c语言】将一个数的二进制序列逆序,然后输出逆序之后的二进制序,所对应的数

//  将一个数的二进制序列逆序,然后输出逆序之后的二进制序,所对应的数

#include <stdio.h>

//  从原数拿出最低位,放到mid中,mid左移,原数右移
int reverse(int a)
{
	int mid = 0;
	int bit;
	int n = 31;
	for (; n > 0; --n)
	{
		bit = a & 1;
		mid |= bit;
		mid <<= 1;
		a >>= 1;
	}
	return mid;
}

int main()
{
	printf("%u\n", reverse(1));
	printf("%u\n", reverse(0));
	printf("%u\n", reverse(-1));
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 06-27

【c语言】将一个数的二进制序列逆序,然后输出逆序之后的二进制序,所对应的数的相关文章

C语言整数按照二进制逆序,输出逆序后的整数值

问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值. 我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在32位机上是占4个字节,即32位. 如   2  = 0000 0000 0000 0000 0000 0000 00000 0010(32位) 逆 ^2  = 0100 0000 0000 0000 0000 0000 00000 0000  (这里用^表示逆转) 那么这个操作要如何执行呢?首先补充

输入的数转化为二进制序列,并统计序列中1的个数

★输入的数转化为二进制序列,并统计序列中1的个数 描述:普通的模除取余后数直接除二的办法易于理解,但是对于输入的数只限于正数和零,对于负数则不适应,所以采用与后移位的方法以此来扩大数的输入范围. #include<stdio.h> int main() { int m,b,c,i; int count = 0; char a[32]; printf("请输入一个数:\n"); scanf("%d", &m); for (i = 0; i <

c语言:获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。

获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列. 程序: #include<stdio.h> int main() { int i, j, num; char arr1[16]; char arr2[16]; printf("输入一个整数:"); scanf("%d", &num); for (i = 0, j = 0; i < 32; i += 2, j++) { arr1[15 - j] = (num >> 

十进制转换为二进制序列,并输出1的个数,和序列的奇偶序列

★十进制转换为二进制序列,并输出1的个数,和序列的奇偶序列 #include<stdio.h> int main() { int m,i,x,y; char a[32];//int为4个字节长,占32个bit位 int count=0; printf("请输入一个数:\n"); scanf("%d", &m); for (i = 0; i < 32; i++) { if (m%2 == 1)         //统计序列中1的个数 { co

与整数二进制序列有关的编程题

1.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列 #include<stdio.h> int main() { inti,j,n,m; chara[32]={0}; printf("peleaseinput the number:"); scanf("%d",&n); for(m=0;m<32;m++) { i=(unsignedint)n%2; j=(unsignedint)n/2; n=j; a[m]=i; } pri

二进制序列相关函数

1.写一个函数返回参数二进制中1的个数 #include<stdio.h> int count_one_bit(int num) { int count=0; int i=32; while(i--) { if(num&1==1) count++; num=num>>1; } return count; } int main() { int n=0; int count=0; scanf("%d",&n); count=count_one_bit

c语言:输出100~200之间的不能被3整除的数。

输出100~200之间的不能被3整除的数. 解:程序: #include<stdio.h> int main() { int i=0; printf("打印出不能被3整除的数:"); for (i = 100; i <= 200; i++) { if (i%3 == 0) { continue; } printf("%d ",i); } printf("\n"); return 0; } 结果: 打印出不能被3整除的数:100 

逆序对问题---求逆序数

逆序数:在一个排列中,如果一对数的前后位置与大小顺序相反, 即前面的数大于后面的数,那么它们就称为一个逆序. 一个排列中逆序的总数就称为这个排列的逆序数.逆序数为偶数的排列称为偶排列:逆序数为奇数的排列称为奇排列. { 设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同. 如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则 <A[i], A[j]> 这一个有序对称为 A 的一个逆序对,也称作逆序.逆序对的数量称作逆

题目:一个数如果恰好等于它的因子之和,这个数就称为 &quot;完数 &quot;。例如6=1+2+3.编程&#160;&#160;&#160;&#160; 找出1000以内的所有完数。

题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程     找出1000以内的所有完数. 1 package day11_2; 2 3 public class lianxi09 { 4 public static void main(String[] args) { 5 6 for (int i = 1; i < 1000; i++) { 7 int sum=0; 8 for (int j = 1; j <i; j++) { 9 10