程序打印数字的二进制等同,而不使用格式说明
只求看看这个program.Logically似乎不错,但它给000000000000000000000一切程序打印数字的二进制等同,而不使用格式说明
#include<stdio.h>
void main()
{
int n=25,k=32;
printf("binary equivalent\n");
while(k!=0)
{
if((n>>1&0x01)!=0)
printf("1");
else
printf("0");
k--;
}
}
你永远不改变n
。
不要试图将所有东西塞进一行,要稍微详细些,以便事情更清楚。
while(k!=0)
{
if((n & 0x01) != 0)
printf("1");
else
printf("0");
k--;
n >>= 1;
}
那是因为你没有改变n。
对于n = 25,我们有(n >> 1)= 12,因此它打印为零。而且,由于您不更改,所以会为所有k打印零。
您可以通过以下方式进行更改:
#include void main() { int n=25,k=32; printf("binary equivalent\n"); while(k!=0) { if((n & 0x01)!=0) printf("1"); else printf("0"); k--; n = n >> 1; } }
但是它会打印颠倒二进制形式呈现。
您尚未修改n
- 每当您将0x01
与n
上的第二位进行比较时。
您不会更改循环内的n值。并且可能你想在移位之前测试最不重要的位。
你n为从未得到改变:
if((n>>1&0x01)!=0)
应该
if(n & 0x01)
,并添加
n>>=1;
后k--;
而且这将产生逆向工程&二进制表示se订单。
我认为这将有助于其结果是一样的其他海报张贴
#include<stdio.h>
int main()
{
int n=25;
int k=32;
printf("binary equivalent\n");
for (int i=0;i<32;i++){
if((n&1)!=0)
printf("1");
else
printf("0");
n>>=1;
}
}
为@falagar说,结果将按照相反的顺序打印
/*
* Author: Andrey Vlassov
* Date: Thu Apr 19 03:10:49 UTC 2012
*
* Description:
* An expample program demonstrating how
* to convert decimal integer number to
* binary representation
*
* NOTE:
* For simplicity additional check left out
*
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char help[] = ">>> Please provide an integer number as argument!!!";
char id[] = "d2b (c) Andrey Vlassov Apr 18, 2012 8:15PM PST";
if(argc < 2) {
printf("%s\n", help);
exit(0);
}
printf("\n%s\n\n", id);
int n = atoi(argv[1]);
int i, bites, bits, mask;
printf("Number is %d\n", n);
printf("size: %d bites\n", bites=sizeof(n));
printf("dec: %d\n", n);
printf("hex: %#x\n", n);
printf("oct: %#o\n", n);
printf("bin: b");
bits = bites*8-1;
mask = 0x01 << (bits-1);
for(i=0; i<bits; i++) {
printf("%d", (n & mask ? 1 : 0));
mask >>= 1;
}
printf("\n\n");
exit(0);
}
// how to print binary number representation of an integer
// using bitwise operators
//
// oon
// 18.04.2013
// Refs
// http://www.cs.northwestern.edu/~wms128/bits.c
// http://www.cs.cmu.edu/~guna/15-123S11/
#include <stdio.h>
#define no_of_bits_in_a_byte 8
#define get_bit(w,i) ((w>>i)&1)
void print_binary(signed int x);
int main()
{
print_binary(2); // 00000000000000000000000000000010
print_binary(-2); // 11111111111111111111111111111110
return 0;
}
void print_binary(signed int x)
{
int i;
int no_of_bytes = sizeof(x);
for (i=no_of_bytes*no_of_bits_in_a_byte-1; i>=0; i--) {
printf("%d",get_bit(x,i));
}
printf("\n");
}
/*
* print_binary2.c
*
* oon
*
* 19.04.2013
*/
// http://www.cs.northwestern.edu/~wms128/bits.c
// http://www.cs.cmu.edu/~guna/15-123S11/
#include <stdio.h>
#define no_of_bits_in_a_byte 8
#define get_bit(w,i) ((w>>i)&1)
void print_binary2(signed int x, unsigned int n);
int check_bits_fit_in_2s_complement(signed int x, unsigned int n);
void main()
{
print_binary2(2,2); // output: The signed integer 2 cannot be represented by 2 bit(s) in two complements form.
print_binary2(2,3); // output: 010
print_binary2(-2,2); // output: 10
print_binary2(-2,3); // output: 110
}
int check_bits_fit_in_2s_complement(signed int x, unsigned int n) {
int mask = x >> 31;
return !(((~x & mask) + (x & ~mask))>> (n + ~0));
}
void print_binary2(signed int x, unsigned int n)
{
// check if x can be represented by n bits in two's complement form.
if (check_bits_fit_in_2s_complement(x,n)) {
int i;
for (i=n-1; i>=0; i--) {
printf("%d",get_bit(x,i));
}
printf("\n");
} else {
printf("The signed integer %d cannot be represented by %u bit(s) in two complements form.\n",x,n);
}
}
的以上代码显示了如何以二进制补码形式打印二进制数字,其中n表示数字的位。
int binary(int n)
{
if(n/2)
binary(n/2);
printf("%d",n%2);
}
void main()
{
int n;
printf("enter any number");
scanf("%d",&n);
binary(n):
getch();
}
打印任何十进制数的二进制等值 – manoj 2014-09-27 07:00:06
试试这个!
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack<int> st;
int n=25, k=32;
while(k!=0){
if((n&0x01)!=0)
st.push(1);
else
st.push(0);
k--;
n=n>>1;
}
while(!st.empty()){
cout<<st.top();
st.pop();
}
}
oops ...意识到我的错误!忘了修改n的值!谢谢.. – Laz 2010-08-17 06:30:30
这将以相反顺序打印二进制数字...... – caf 2010-08-17 07:13:02
当然这会以二进制向后打印数字(最低有效位在前)。上面的代码 – wcochran 2013-10-18 03:55:25