关于C语言?
我最近在自己学C语言,有个地方理解不了,变量赋值我就是搞不懂,2进制,8进制,10进制,16进制之间的关系,是怎么转换的,有人说有公式,能不能告诉我,谢谢了
补充:二进制转八进制 用421码,每 三位一分,不足左补0,例
1010100
001,010,100
分别对应
421,421,421
位数累加,结果就是
124
这里怎么得的124呢???不知该叫啥,在吗???加我QQ4411326
我最近在自己学C语言,有个地方理解不了,变量赋值我就是搞不懂,2进制,8进制,10进制,16进制之间的关系,是怎么转换的,有人说有公式,能不能告诉我,谢谢了
补充:二进制转八进制 用421码,每 三位一分,不足左补0,例
1010100
001,010,100
分别对应
421,421,421
位数累加,结果就是
124
这里怎么得的124呢???不知该叫啥,在吗???加我QQ4411326
答案:这和变量赋值有什么关系...
int a=12 十进制
int b=012 八进制
int c=0012 十六进制
二进制转十进制 例 101 1*2^0+0*2^1+1*2^2=5
就是把二进制每一位分解开 从第一位开始 分别乘以2的0次 1次 2次 3次...
二进制转八进制 用421码,每 三位一分,不足左补0,例
1010100
001,010,100
分别对应
421,421,421
位数累加,结果就是
124
二进制转十六进制用8421码,与八进制类似
反过来就是其他进制转2进制..二进制到十进制的转换
我们按如下方法从二进制补码向十进制转换:为了举例说明,我们假设使用8位的二进制补码表示,相应的十进制数值从-128到127。
一个8位的二进制补码数采取如下格式:
a7 a6 a5 a4 a3 a2 a1 a0
其中的每个ai要么是0要么是1。
1. 检查最前面的a7。如果是0,该整数是正数,我们就可以直接计算其数值。如果是1,该整数是负数,我们必须首先得到与其绝对值相同的正数的二进制补码表示(即“取反加1”)。
2. 通过简单的计算:
a6*26+a5*25+a4*24+a3*23+a2*22+a1*21+a0*20
得到该数值。我们只需将那些系数为1的2的幂次简单相加,就可以得到该数值。
3. 最后,如果原数值是负数,我们在前面加一个负号前缀即可。
十进制到二进制的转换
把一个数从十进制转换成二进制复杂一些。这种方法最重要的依据是:如果一个正的二进制数的最右端的数字为1,则这个数为奇数;否则为偶数。
再来看一个通用的八位二进制数的表示:
a7*27+a6*26+a5*25+a4*24+a3*23+a2*22+a1*21+a0*20
还是通过一个例子来具体说明这种转换:
假设我们想把十进制数+105转化成二进制补码表示。我们注意到+105是正数。首先我们要找到表示105的ai的值。由于该数值为正数,则二进制补码表示的最高位a7为0。
第一步是找到满足下列等式的ai的值:
105=a6*26+a5*25+a4*24+a3*23+a2*22+a1*21+a0*20
由于105是奇数,可知a0=1,在等式两端同时减去1可得:
104= a6*26+a5*25+a4*24+a3*23+a2*22+a1*21
下一步,在等式两端同时除以2,得:
52=a6*25+a5*24+a4*23+a3*22+a2*21+a1*20
52为偶数,所以a1一定为0。
现在,我们重复这个过程:在等式两端同时减去最右端的数,在等式两端同时除以2,然后我们观察新得到的等号左端的十进制数是奇还是偶。再来看我们刚才的例子
52=a6*25+a5*24+a4*23+a3*22+a2*21
经过以上的步骤,结果为:
26= a6*24+a5*23+a4*22+a3*21+a2*20
所以,a2=0。
13= a6*23+a5*22+a4*21+a3*20
所以,a3=1。
6= a6*22+a5*21+a4*20
所以,a4=0。
3= a6*21+a5*20
所以,a5=1。
1= a6*20
所以,a6=1,我们得到了最后的结果:二进制表示为01101001。
我们总结解题过程如下:已知十进制数N,通过以下步骤可得其补码表示:
1. 首先将N的绝对值的二进制码字用等式表示出来:
N= a6*26+a5*25+a4*24+a3*23+a2*22+a1*21+a0*20
重复以下步骤直至左边等式数字为0:
a. 如果N为奇,则最右边一位数为1;如果N为偶,则最右边一位数为0;
b. 两边同时减去1或0(若N为奇,则减去1;若N为偶,则减去0),然后两边同时除以2;
每一次重复这一步可得到一个ai的值。
2. 如果原来的十进制数为正,则在二进制数前加0,得到结果;
3. 如果原来的十进制数为负,在二进制数前加0,然后再计算出这个补码的负数,得到结果。
十六进制转化为二进制:
0011110101101110
如果我们首先将这个位组合按照每四位进行分割
0011 1101 0110 1110
然后将每四位转换为相等的十六进制数
3 D 6 E
要想转化为八进制,道理同上
16进制转化为10进制,先将十六进制数转化为二进制数 然后再转化为10进制其实公式没什么用,全靠自己弄
上一个:php里面取模余数用什么运算符号,不小心忘记了
下一个:c语言速成法有吗?