二进制详解

二进制详解以下是一个简单的程序 include stdio h int main int n 1 while n gt 0 printf d r n n n return 0 该程序并非死循环 因为 c 语言中正数是有极限的 即 stdio h

大家好,我是讯享网,很高兴认识大家。

以下是一个简单的程序

#include<stdio.h>
int main()
{
    int n = 1;
    while(n > 0):
        printf("%d\r\n",n);
        n++ ;
    return 0;

该程序并非死循环,因为c语言中正数是有极限的,即

程序运行一分钟后,达到数字

待程序一直运行,达到数字时停止

c语言数值运算的原理

c语言中,数的乘除并不是数学中的乘除,而是由左移右移解决

每个数,编译器都会将其转换为二进制数,如32->

右移>>相当于除以2 

左移<<相当于乘以2

若被乘或被除数为正数,则根据左移右移位数加0,补在后面或前面

若被乘或被除数为负数,则根据左移右移位数加1,补在后面或前面

若将乘以2-->位数左移<< =64 ,

c语言减法运算

计算机内部采用补码来计算的。

A--B                                             85-23

A+(100--B)--100                          85+(100-23)

B+~B=ff                                       85+77=162

B+~B+1=100                                         =62  (进位丢失)

~B+1=100--B  求补运算             85-23=62

A+B (A是正数,B是正数)
正数时正常加(Add Normal)
[0001]原 + [0001]原 = [0010]原

A+B (A是正数,B是负数)
此时要把加法变为减法,再拿数值相减
11 + (-6) = [01011]原 + [10110]原 = 1011 - 0110 = 0101 = 5

A+B (A是负数,B是负数)
此时要正常相加数值,最后要保留符号
-3 + (-4)= [10011]原 + [10100]原 = 0011 + 0100 = 0111 = -7

A+neg(B)--100  进位丢失

求补运算是一种运算

补码是一种编码

补码规定了数据的读写双方必须做到以下几点:

1,最高有效位是符号位,0表示正,1表示负

2,当数据是正数的时候,其余各位直接存储其数值

3,当数据是负数的时候吗,其余各位存储其求补后的值

机器数 真值 原码 反码 补码

机器数:一个数在计算机中的二进制表示形式,  叫做这个数的机器数。

机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

八位二进制数由首位符号位和其余七位二进制数组成,范围是-127~+127

S DDDDDDD 

+52=0 0

补码:00-->(十六进制)0011 0100-->3 4 内存存档地址 34 00 00 00 正数,高位填0

-52=1 0-->(十六进制)-->c c 内存存档地址 cc ff ff ff 负数,高位填1,转换为十六进制为f

真值:通过机器数最高位0或1判断该真值符号。去最高位,其余位作为新的二进制数,转化为十进制数。此十进制数加上符号,所得数为真值

原码:指一个二进制数左边加上符号位后所得到的码,

反码:正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

补码:正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

补码的好处

在计算机系统中,数值一律用补码来表示和存储。

运算方便
-56 + 12 = [1100 1000]补 + [0000 1100]补 = [1101 0100]补 = -44
28 + (-26)= [0001 1100]补 + [1110 0110]补 = [1 0000 0010]补 = [0000 0010] = 2

进制介绍

十进制

用10个可用符号来表示一个数字

0 1 2 3 4 5 6 7 8 9

如    2        3        5= 2*100+3*10+5*1=2*10^2+3*10^1+5*10^0=200+30+5=235

      百位  十位   个位

二进制

用2个可用符号来表示一个数字

0  1

如   1        0       1      1=1*2^3+0*2^2+1*2^1+1*2^0=8+0+2+1=11(相当于十进制下)

    八位  四位  二位  个位

八进制

用8个可用符号来表示一个数字

0  1  2  3  4  5  6  7

0  1  2  3  4  5  6  7(相当于十进制下)

如 2  7  7  (八进制下)=2*8^2+7*8^1+7*8^0=128+56+7=191(相当于十进制下)

十六进制

0  1  2  3  4  5  6  7  8  9   A   B    C   D    E    F

0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15(相当于十进制下) 

如 2  A  E(十六进制下)=2*16^2+10*16^1+14*16^0 

进制转换

十进制转二进制 连除法

如  29(十进制下)


讯享网

29/2=14~1

14/2=7~0

7/2=3~1

3/2=1~1

1/2=0~1

一个数除以二取商再除,一直除到商为零,其过程中所有余数如上图,反向排列合起来即为所得二进制数11101

即29(十进制下)=11101(二进制下 )

十进制转八进制  方法如上

如 900(十进制下)

900/8=112~4

112/8=14~0

14/8=1~6

1/8=0~1

900(十进制)=16044(八进制)

十进制转十六进制  方法如上

此处不再多述

二进制 八进制 十六进制 相互转换

由于2^3=8,所以每三位二进制可以转换为一位八进制

如(二进制)

分为三部分 10 111 001

001=1*2^0+0*2^1+0*2^2=1

111=1*2^1+1*2^1+1*2^2=7

10=0*2^0+1*2^1=2

所以 (二进制)=271(八进制)

由于2^4=16,所以每四位二进制可以转换为一位十六进制

方法如上同,此处不再多述

其余进制转换,可由上述内容进行推演得到,此处不再赘述

十进制小数表示

abc.ef=a*100+b*10+c*1++e*0.1+f*0.01

          =a*10^2+b*10^1+c*10^0+e*10^-1+f*10^-2

c:零位权 b:一位权 a:二位权 e:负一位权 f:负二位权

二进制,八进制,十六进制同上

小数进制转换

十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)

   例:  (0.625)10= (0.101)2

               0.625

     X                 2  

               1.25        1

    X             2  

               0.5         0

X                 2  

              1.0         1

知道结果为1停止运算

小讯
上一篇 2025-03-30 17:50
下一篇 2025-03-02 19:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/63166.html