编程成长日记——重拾C语言<二>

关于按位与&和逻辑右移>>

求一个数的二进制的时候,可以采用这种方法,向右移一位,相当于除以二,所以有以下代码:

#include<stdio.h>
//求一个数的二进制 
int main() 
{ 
   char arr[32];
   int num=0;
   int i=0;
   printf("请输入一个数字:");
   scanf("%d",&num);
   for(i=0;i<32;i++)
   {
 	  arr[i]=(num>>i)&1; 
   }
   for(;i;i--)
   {
 	  printf("%d",arr[i-1]);
   }  
   return 0;
}

当然还有除以二取余的办法:

#include<stdio.h>
#define n 32
//求一个数的二进制 
int main() 
{ 
 	unsigned int num = 0;
	int count = 0;
	int i;
	int arr[n];
	printf("请输入一个数字\n");
	scanf("%d",&num);
	printf("%d的二进制数为:",num);
	for (i=0;i<n;i++)
	{
		arr[i]=num%2;
		num=num/2;
	}
	for (i=n;i;i--)
	{
		printf("%d",arr[i-1]);
	}
    return 0;
}

在这里要注意的是如果用第二种方法求二进制数时,在定义num时,一定要注意其类型,如果直接定义为int型,则缩小了可以求的数的范围,不能求负数,所以一定要定义成unsigned int(无符号型)。

时间: 2024-10-20 08:20:30

编程成长日记——重拾C语言<二>的相关文章

编程成长日记——重拾C语言

人生总是需要一个契机才会去改变,其实与其说是契机,也不过是自己再给自己一次机会而已. 重拾C语言,我决定再给自己一次机会,不知道多年以后的我再次翻看这篇博客的时候会是怎样的心情,会不会记得当下身为大三狗的我终于想要告别一事无成,一无所获,一败涂地的颓废而不自知的大学生活,我不想说是为了理想而奋斗,更不是为了中华崛起,只是为了我自己,仅此而已. 感谢比特,给我一次改变的机会. 从零开始学起C语言. --------------------------------------煽情分割线-------

重拾C语言---读C和指针一书的收获(1)

不得不大赞这本<C和指针>一书,不愧是2014年最畅销书籍之一,作者很负责,而且,每一页你都可以发现自己需要学习的地方,真心不错,就决定写博客来记录我阅读这本书的收获. 一,注释 在C中,如果你用/*   */来注释掉一段代码,你不一定能如愿,如果,这段代码内部原先就有注释存在,这样子就会出现问题. 要从逻辑上删除一段C代码,最好的办法是用#if指令 #if 0   statement #endif 这样子statement就可以有效的从程序中去掉 二,预处理指令 #include 头文件 如

编程成长日记——有意思的编程题(一)

//日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个.以下为4个嫌疑犯的供词. //A说:不是我. //B说:是C. //C说:是D. //D说:C在胡说 //已知3个人说了真话,1个人说的是假话. //现在请根据这些信息,写一个程序来确定到底谁是凶手. #include<stdio.h> int main() { int i=0; int killer=0; for(i=0;i<4;i++) { killer=65+i; if((killer!='A' )+(ki

重拾c语言之动态内存分配

动态内存分配 传统数组的缺点: 1数组长度必须事先制定,且仅仅能是长整数不能是变量 2传统形式定义的数组该数组的内存程序无法手动释放 3数组一旦定义,系统就会为该数组分配的存储空间就会一直存在直到该函数执行结束 4数组的长度不能再函数的执行的过程中动态的扩充或者缩小 5不能跨函数使用 为什么须要动态分配内存 动态内存分配内存举例--动态数组的构造 静态内存分配和动态内存分配 跨函数使用内存的问题 #include<stdio.h> void f(void) { int a[5]={0,1,2,

编程成长日记——杨辉三角

#include<stdio.h>  //杨辉三角  int main() { int i=0,j=0,n=0,k=0;   int a[100][100]={1,0};   printf("请输入杨辉三角形的行数:");   scanf("%d",&n);    for(i=0;i<=n;i++) {       for(j=0;j<=n;j++)   {         a[i][0]=1;         a[i][i]=1;

编程成长日记——折半查找

编写一个折半查找函数 #include<stdio.h> //编写折半查找函数 int binsearch(int a,int num[],int b ) { int left=0,right=b-1,mid=0; while(left<=right) {    int mid=(left+right)/2;  if (num[mid]<a) { left=left+1; } else if (num[mid]==a) { return mid; } else { right=mi

编程成长日记——打印菱形图案

#include<stdio.h> //打印菱形图案  int main() { int i=0,j=0,n=0; printf("请输入一个数字:\n"); scanf("%d",&n); printf("\n"); for(i=1;i<=n;i++) { for (j=1;j<=n-i;j++) { printf(" "); } for (j=1;j<=(2*i-1);j++) { p

编程成长日记————模拟三次输入密码

简单的模拟取钱时输入密码: #include<stdio.h> #include<windows.h> #include<string.h> int main () { int i=0; int n=2; char passwd[10]; char *p="123456"; for (i=0;i<3;i++) { printf("请输入密码:\n");     scanf("%s",passwd); if

编程成长日记————猜数字游戏

模拟猜数字游戏,提示用户每次应输入的数字范围. #include <stdio.h> #include <stdlib.h> //猜数字游戏 int main() { int i=0; int num =0,ret=0,choose=0; int min=1,max=100; flag: srand((unsigned)time(NULL));  ret=rand()%100+1; while(1) { printf("请输入%d~%d之间的数字:\n",min