用C语言编程打印十进制数1到256的二进制、八进制和十六进制数值表

用C语言编程打印十进制数1到256的二进制、八进制和十六进制数值表,第1张

以下程序在TURBOC上调试通过:
#include <stdioh>
#include <limitsh>
void bit_print(int a)
{
int i;
int n;
unsigned long int mask;
n=sizeof(a)CHAR_BIT;
mask=0x8000;
for (i=1; i<=n; ++i) {
putchar(((a&mask)==0)'0':'1');
mask>>=1;
if (i%CHAR_BIT==0&&i<n) {
putchar(' ');
}
}
}
int main(void)
{
int i;
for (i=1; i<=256; i++) {
printf("%d\t",i);
bit_print(i);
putchar('\t');
printf("%o\t%X\n",i,i);
}
return 0;
}
输出内容为:
1 00000000 00000001 1 1
2 00000000 00000010 2 2
3 00000000 00000011 3 3
4 00000000 00000100 4 4
5 00000000 00000101 5 5
6 00000000 00000110 6 6
7 00000000 00000111 7 7
8 00000000 00001000 10 8
9 00000000 00001001 11 9
10 00000000 00001010 12 A
11 00000000 00001011 13 B
12 00000000 00001100 14 C
13 00000000 00001101 15 D
14 00000000 00001110 16 E
15 00000000 00001111 17 F
16 00000000 00010000 20 10
17 00000000 00010001 21 11
18 00000000 00010010 22 12
19 00000000 00010011 23 13
20 00000000 00010100 24 14
21 00000000 00010101 25 15
22 00000000 00010110 26 16
23 00000000 00010111 27 17
24 00000000 00011000 30 18
25 00000000 00011001 31 19
26 00000000 00011010 32 1A
27 00000000 00011011 33 1B
28 00000000 00011100 34 1C
…………
208 00000000 11010000 320 D0
209 00000000 11010001 321 D1
210 00000000 11010010 322 D2
211 00000000 11010011 323 D3
212 00000000 11010100 324 D4
213 00000000 11010101 325 D5
214 00000000 11010110 326 D6
215 00000000 11010111 327 D7
216 00000000 11011000 330 D8
217 00000000 11011001 331 D9
218 00000000 11011010 332 DA
219 00000000 11011011 333 DB
220 00000000 11011100 334 DC
221 00000000 11011101 335 DD
222 00000000 11011110 336 DE
223 00000000 11011111 337 DF
224 00000000 11100000 340 E0
225 00000000 11100001 341 E1
226 00000000 11100010 342 E2
227 00000000 11100011 343 E3
228 00000000 11100100 344 E4
229 00000000 11100101 345 E5
230 00000000 11100110 346 E6
231 00000000 11100111 347 E7
232 00000000 11101000 350 E8
233 00000000 11101001 351 E9
234 00000000 11101010 352 EA
235 00000000 11101011 353 EB
236 00000000 11101100 354 EC
237 00000000 11101101 355 ED
238 00000000 11101110 356 EE
239 00000000 11101111 357 EF
240 00000000 11110000 360 F0
241 00000000 11110001 361 F1
242 00000000 11110010 362 F2
243 00000000 11110011 363 F3
244 00000000 11110100 364 F4
245 00000000 11110101 365 F5
246 00000000 11110110 366 F6
247 00000000 11110111 367 F7
248 00000000 11111000 370 F8
249 00000000 11111001 371 F9
250 00000000 11111010 372 FA
251 00000000 11111011 373 FB
252 00000000 11111100 374 FC
253 00000000 11111101 375 FD
254 00000000 11111110 376 FE
255 00000000 11111111 377 FF
256 00000001 00000000 400 100

这里需要结合具体例子来讲解,比如:十进制的065转化为二进制表示为:01010011(跟精度限制有关)。

十进制小数用二进制通常是用乘二取整法来获得的。

比如065换算成二进制就是:065 × 2 = 13 取1,留下03继续乘二取整;03 × 2 = 06 取0, 留下06继续乘二取整;06 × 2 = 12 取1,留下02继续乘二取整;

一直循环,直到达到精度限制才停止(所以,计算机保存的小数一般会有误差,所以在编程中,要想比较两个小数是否相等,只能比较某个精度范围内是否相等)。


扩展资料:

二进制的优缺点:

一、优点

1、数字装置简单可靠,所用元件少;

2、只有两个数码0和1,因此它的每一位数都可用任何具有两个不同稳定状态的元件来表示;

3、基本运算规则简单,运算 *** 作方便。

二、缺点

用二进制表示一个数时,位数多。因此实际使用中多采用送入数字系统前用十进制,送入机器后再转换成二进制数,让数字系统进行运算,运算结束后再将二进制转换为十进制供人们阅读。

二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。

参考资料来源:百度百科-二进制

//---------------------------------------------------------------------------
#include <stdioh>
#include <limitsh>
int main(void)
{
int a,i=0;
unsigned int mark=1<<CHAR_BITsizeof(int)-1;
scanf("%d",&a); /输入要查看二进制形式的整数/
while (mark)
{
putchar(a&mark'1':'0');
if (++i%4==0) putchar(' ');
mark>>=1;
}
putchar('\n');
return 0;
}
//---------------------------------------------------------------------------

如果是整数的话就比较方便,这个 *** 作可以实现,使用库函数先把数字字符串转换成数值型,然后使用进制转换函数,自己编一个。

#include<stdioh>

#include<stdlibh>

void dec2n(int x,int n)

{if(x>=n)dec2n(x/n,n);

printf("%c",x%n<10'0'+x%n:'A'+x%n-10);

}

int main()

{ char s[15];

int x;

scanf("%s",s);

x=atoi(s);

dec2n(x,2);

printf("\n%o\n%X\n",x,x);

return 0;

}

八进制和十六进制可以直接用%o和%x输出。

二进制这里自己弄了下。

#include <stdioh>
int main(int argc, char argv[])
{
    int i, j, n;
    char two[9] = {0};
    for(i = 1; i <= 255; i++)
    {
        /十进制/
        printf("%4d",i);
        /二进制/
        for(j=7, n=i; j>=0; j--, n>>=1)
        {
            two[j]=(n & 1) + '0';
        }
        printf("%9s", two);
        /八进制/
        printf("%4o", i);
        /十六进制/
        printf("%3x\n", i);
    }
    return 0;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13393252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存