负数十六进制怎么用位取反转换成负值

负数十六进制怎么用位取反转换成负值,第1张

打开电脑,点击开始,选择运行,输入calc,打开计算器程序,选择十进制,输入0-28654,得到-28654,再选择十六进制,根据你需要的位数,一个十六进制数位对应4个二进制位,如果你是32位的二进制数,取最后8位十六进制数就可以了。

#include <iostream>
using namespace std;
int f(int a){
int mark = 0xff, r = 0;
for(int i=0; i<sizeof(a); i++){
r <<= 8;
r |= a&mark;
a >>= 8;
}
return r;
}
int main(){
int a = 0x45F0EA31;
cout << hex << uppercase << f(a);
}

十进制转n进制是除n求余取反
例如:10的八进制:
10/8=1
余数:2
1/8=0
余数1
12就是10的八进制
12:18^1+28^0=10

定义16进制即逢16进1,其中用A,B,C,D,E,F(字母不区分大小写)这六个字母来分别表示10,11,12,13,14,15。

顾而有16进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F16个大写字母16进制到十进制16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X 16的N次方例:2AF5换算成10进制:用竖式计算:第0位:5 16^0 = 5第1位:F 16^1 = 240第2位:A 16^2= 2560第3位:2 16^3 = 8192 +-------------------------------------10997直接计算就是:5 16^0 + F 16^1 + A 16^2 + 2 16^3 = 1099716进制到二进制由于在二进制的表示方法中,每四位所表示的数的最大值对应16进制的15,即16进制每一位上最大值,所以,我们可以得出简便的转换方法,将16进制上每一位分别对应二进制上四位进行转换,即得所求:例:2AF5换算成2进制:第0位:(5)16 = (0101) 2第1位:(F)16 = (1111) 2第2位:(A) 16 = (1010) 2第3位:(2) 16 = (0010) 2 -------------------------------------得:(2AF5)16=(0010101011110101)2从二进制转换成十六进制的简便方法例举16进制就有16个数,15,用二进制表示15的方法就是1111,从而可以推断出,16进制用2进制可以表现成0000~1111,顾名思义,也就是每四个为一位举例:0111101可以这样分:0011|1101(最高位不够可用零代替),对照着二进制的表格,1024 512 256 128 64 32 16 8 4 2 1 (一般例举这么多就够了,如果有小数的话就继续往右边列举,如05 025 0125 00625……)1024 512 256 128 64 32 16 8 4 2 10 0 1 1| 1 1 0 1左半边=2+1=3 右半边=8+4+1=13=D结果,0111101就可以换算成16进制的3D

十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。

1基本知识
十进制
基数为10,逢10进1。在十进制中,一共使用10个不同的数字符号,这些符号处于不同位置时,其权值各不相同。
二进制
基数为2,逢2进1。在二进制中,使用0和1两种符号。
八进制
基数为8,逢8进1。八进制使用8种不同的符号,它们与二进制的转换关系为:
0:000 1:001 2:010 3:011 4:100 5:101 6:110 7:111
十六进制
基数为16,逢16进1。十六进制使用16种不同的符号,它们与二进制的转换关系为:
0:0000 1:0001 2:0010 3:0011 4:0100 5:0101 6:0110 7:0111
8:1000 9:1001 A:1010 B:1011 C:1100 D:1101 E:1110 F:1111
二进制数的运算
算术运算:加法
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10(向高位进1)
算术运算:减法
0 0 = 0 0 1 = 1(向高位借1) 1 0 = 1 1 - 1 = 0
逻辑运算:或(∨)
0 ∨ 0 = 0 0 ∨ 1 = 1 1 ∨ 0 = 1 1 ∨ 1 = 1
逻辑运算:与(∧)
0 ∧ 0 = 0 0 ∧ 1 = 0 1 ∧ 0 = 0 1 ∧ 1 = 1
逻辑运算:取反
0取反为1 1取反为0
注意:算术运算会发生进位、借位,逻辑运算则按位独立进行,不发生位与位之间的关系,其中,0表示逻辑假,1表示逻辑真。
2转换为十进制
二进制化为十进制
例:将二进制数10101转换成十进制数
(10101)2 = 1×22 + 0×21 + 1×20 + 0×2-1 + 1×2-2 = (525)10
八进制化为十进制
例:将八进制数126转换成十进制数
(126)8 = 1×81 + 2×80 + 6×8-1 = (1075)10
十六进制化为十进制
例:将十六进制数2AB6转换成十进制数:
(2AB6)16 = 2×162 + 10×161 + 11×160 + 6×16-1 = (683375)10
3转换为二进制
八进制化为二进制
规则:按照顺序,每1位八进制数改写成等值的3位二进制数,次序不变。
例: (1736)8 = (001 111 011 110)2 = (111101111)2
十六进制化为二进制
规则:每1位十六进制数改写成等值的4位二进制数,次序不变。
例: (3A8CD6)16 = (0011 1010 1000 11001101 0110)2 = (111010100011001101011)2
十进制整数化为二进制整数
规则:除二取余,直到商为零为止,倒排。
例:将十进制数86转化为二进制
2 | 86…… 0
2 | 43…… 1
2 | 21…… 1
2 | 10…… 0
2 | 5 …… 1
2 | 2 …… 0
2 | 1 …… 1
结果:(86)10 = (1010110)2
十进制小数化为二进制小数
规则:乘二取整,直到小数部分为零或给定的精度为止,顺排。
例:将十进制数0875转化为二进制数
0875
× 2
175
× 2
15
×2
10
结果:(0875)10 = (0111)2
4转换为八进制
二进制化为八进制
整数部份从最低有效位开始,以3位一组,最高有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换完毕就是八进制的整数。
小数部份从最高有效位开始,以3位一组,最低有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换完毕就是八进制的小数。
例:(1100111101111)2 = (11 001 111011 110)2 = (31736)8
十六进制化为八进制
先用1化4方法,将十六进制化为二进制;再用3并1方法,将二进制化为8制。
例: (1CA)16 = (000111001010)2 = (712)8
说明:小数点前的高位零和小数点后的低位零可以去除。
十进制化八进制
方法1:采用除8取余法。
例:将十进制数115转化为八进制数
8| 115…… 3
8| 14 …… 6
8| 1 …… 1
结果:(115)10 = (163)8
方法2:先采用十进制化二进制的方法,再将二进制数化为八进制数
例:(115)10 = (1110011)2 = (163)8
5转换为十六进制
二进制化为十六进制
整数部份从最低有效位开始,以4位为一组,最高有效位不足4位时以0补齐,每一组均可转换成一个十六进制的值,转换完毕就是十六进制的整数。
小数部份从最高有效位开始,以4位为一组,最低有效位不足4位时以0补齐,每一组均可转换成一个十六进制的值,转换完毕就是十六进制的小数。
例:(1100111101111)2 = (1100 1111 0111 1000)2 = (CF78)16
八进制化为十六进制
先将八进制化为二进制,再将二进制化为十六进制。
例:(712)8 = (111001010)2 = (1CA)16
十进制化为十六进制
方法1:采用除16取余法。
例:将十进制数115转化为八进制数
16| 115…… 3
16| 7 …… 7
结果:(115)10 = (73)16
方法2:先将十进制化为二进制,再将二进制化为十六进制。
例:(115)10 = (1110011)2 = (73)16

参考资料:

百度

十进制数可以转换成十六进制数的方法是:十进制数的整数部分"除以16取余",十进制数的小数部分"乘16取整",进行转换。

比如说十进制的01转换成八进制为00631463146314631。就是01乘以8=08,不足1不取整,08乘以8=64,取整数6, 04乘以8=32,取整数3,依次下算。

十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。

十六进制照样采用位置计数法,位权是16为底的幂。对于n位整数,m位小数的十六进制数用加权系数的形式表示如下:

首先输入的应该是字符串……把ascii码字符转化数字,'0'~'9'的字符减30h也就是10进制的48,大于'9'也就是是'a'~'f'的字符在减48的基础上再减7才能转化为对应的数字,从左到右乘16加上后面的数到遇到+号为止,转化为10进制的数,然后同样再对后面的数处理转化为10进制……然后做运算……需要把运算结果转化为16进制的,再除16取余依次存到一个字符串中……最后倒着输出该字符串……

二进制基础权: 128 64 32 16 8 4 2 1
数字: 0 1 0 0 1 0 1 1
换算: 64 + 8 + 2 + 1 = 75(10)二进制:1 1 0 0 0 0 0 0
换算:192(10)=11000000(2)
10进制->2进制:192-128=64-64=016进制的权:256 16 1
16进制数: 1 1
16进制数: c 0
换算:11(16)=116 + 11 = 17(10)
换算: c0(16)=1216 = 192(10)
二进制与16进制的对应关系:
1100 0000(2)
12 0
c 0 (16)关于16进制的意义:
16进制是二进制的简写形式
16进制是二进制的助记符号
计算机内部只有二进制
为了方便输入和查看,二进制的显示和输入
习惯上采用16进制12×-2 = -24补码
一个数的最高位是符号位:
0表示正数,1表示负数
正数的补码是正数本身
负数的补码是原数字(不包含符号位)取反加一
计算机内部的所有整数都采用补码存储补码的优点:
补码运算时,符号位参与运算(+-x/)结果
经过溢出(自动)以后,符合数学运算结果。如:
整数: 1(10)
1Byte: 0000 0001(2)
整数:-1(10)
1Byte: 1111 1111(-1 的补码) -1 1111 1111
+ 8 +0000 1000
---------------------
7 0000 0111 -1 1111 1111
+ -1 1111 1111
-------------------------
1111 1110八位有符号补码的最大值:
0111 1111(2) 7f(16) 127(10)
八位有符号补码的最小值:
1000 0000(2) 80(16) -128(10)
八位有符号补码的-1:
1111 1111(2) ff(16) -1(10)
八位有符号补码的0:
0000 0000(2) 00(16) 0(10)


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存