负数(十进制)如何转化成八进制十六进制

负数(十进制)如何转化成八进制十六进制,第1张

对于有符号数的话,2进制最高为1表示负,0表示正
先将10进制数转换成2进制,再从2进制转化为8进制和16进制
例子:10进制数:-10
转化成2进制:11111111
11110110
转换成8进制:
177766
转化成16进制:
FFF6

计算机中的整数是用补码存储的,最高位为符号位,C语言也遵从同样的规则。
如果最高位为0则为正数,求值的时候,直接转为10进制即可。
最高位如果为1代表为负数,求值的时候,需要先把二进制的值按位取反,然后加1得到负数绝对值(相反数)的二进制码,然后转为10进制,加上负号即可。
以char型为例,char占一个字节,即8位。
对于二进制值B10110011转换十进制过程为:
先取反,即1变0,0变1,得到:
B0100 1100
再加1:
B0100 1101
转为十进制,即按照每位的权值乘上对应位的值,结果相加即可。
十进制值=02^7 + 12^6 + 02^5 + 02^4 + 12^3 + 12^2 + 02^1 + 12^0
=0+64+0+0+8+4+0+1
=77
加上符号,最终的十进制值就是-77。
即B10110011 表示的十进制值为-77。

我明白你的意思了。你应该知道计算机中所有数据都是用二进制表示的,数字也不例外,只有二进制的符号位比较特殊,用0,1分别表示正负,而其它进制都是用+,-号。由于计算机中所有数据都是二进制,那么就不存在你说的问题了。比如你那个数表示成10进制=-22,8进制啊16进制的前面填个符号就行,并不需要有如122(你可能认为代表-22)之类的东西。
其实0010110不是负的。负的话用8位表示就是10010110,即第一位是符号位。这就是原码。而该负数的反码就是除符号位外0→1,1→0,即11101001。而补码则是在反码上+1,即11101010。

负数一般都是用补码表示的,就是在正数的基础上,求反然后加1因此
+617=269hex,现在要求反,一般是16位的,因此,求反的结果是fd96,加1,结果是fd97,这个就是-617的十六进制。你用计算机做的结果是正确的,计算器中采用的是16位16进制的结果


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

原文地址: http://outofmemory.cn/yw/12671290.html

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

发表评论

登录后才能评论

评论列表(0条)

保存