C语言的二进制

什么是二进制

其实二进制和我们平时所使用的记数法是一样的,只不过我们平常会使用十个不同的数字符号来表示数值:“0,1,2,3,4,5,6,7,8,9”,并且每位需要分别乘上“1,10,100,1000,10000”(个、十、百、千、万)

比如528的组成:8*1+2*10+5*100=528

二进制的每位分别乘上“1,2,4,8,16”,比如二进制 0101的组成:1*1+0*2+1*4+0*8=5,就是说 二进制 0101 所表示的数值是 5

位权的概念

这个每位分别乘上的固定数值,就是所谓的“位权(weight)”,即“每位的权重”。

前面说了,在我们平常生活所使用的记法中,每位的位权分别是“1, 10, 100, 1000”

一般的,从第1位开始,第 i 位的位权其实就是 10^(i-1),而对于二进制,第 i 位的位权则为 2^(i-1)

规律:“ r进制”第 i 位的位权就是:r^(i-1),例如三进制第 i 位的位权就是 3^(i-1)。所以,我们平时生活所使用的记法,也可以叫做“十进制”。

当然,计算机的专业人士会比较喜欢从“0”开始数,比如十进制的个位数,我们一般看作第1位,计算机则看作第0位。那么此时第 i 位的位权公式实际上应当是 r^i 而不是 r^(i-1)

位权与进位

那么“位权(weight)”的实际意义究竟是什么呢?其实它规定了进位的规则。

比如,十进制第 i 位的位权为 10^i ,具体地,从第0位开始,它的每位位权分别是“1, 10, 100, 1000...”。我们小学就学过,十进制的加法是逢十进一的,个位满十,就向十位进一。这意思可不就是,1个 十位的“1” 代表10个 个位的“1” 吗?因此,十位的位权是“10”。然后,1个百位代表10个十位,因此百位的位权是“100”,以此类推。

那么二进制呢?从第0位开始,二进制每位位权分别是“1, 2, 4, 8”,或者说 2^0、2^1、2^2、2^3。在二进制中,1个 第2位 代表 2个 第1位,1个 第1位 代表 2个 第0位。所以,二进制是“逢二进一”的。那么一般地,“ r进制”就是“逢 r进一”的。这也是为什么,它的名字叫做 r“进”制。

参考:https://www.zhihu.com/question/330681697/answer/1981060025

1个字节的最大值和最小值

1个字节等于8位,就是8个二进制,那么最大值就是8个1,所表示的数值为1*2^0+1*2^1+1*2^2 +... +1*2^7=255

简化为2^0+2^1+2^2,实际就是等比数列的求和公式2^n-1 (n为项数),8位就有8项,最大值公式为2^8-1=255,范围就是0到255

相关知识:等比数列的求和是怎么来的

如果是有符号的整数,最高位1表示负号,0表示正号

最大值 0111 1111

最小值 1000 0000

最大值只能用剩下的7位表示,所以是2^7-1=127,最大值+1等于最小值,因为是负号,所以是-128,最终范围-128到127

posted @   C羽言  阅读(319)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示