正数转二进制很简单,转十六进制也很简单。

那么负数的情况下呢?在计算机中无法识别你给的符号“+”,"-",计算机只认识0和1 那么在二进制中如何表示负数。

先简单介绍一下负数如何转二进制,八进制,十六进制:

比如给的是-4

那么先算出+4的二进制表示:

1 0 0

但是请记住我们需要在前面补0,因为在计算机中一个Int32为的数字是一个长度为32的内存空间,计算机眼里

0000 0000 0000 0000 0000 0000 0000 0100  才是4,这是源码

接下来进行反码,结果是

1111 1111 1111 1111 1111 1111 1011

反码之后,再+1便是4的补码

1111 1111 1111 1111 1111 1111 1100

得到4的补码之后,其实这个补码就是-4的二进制表示,那么-4的八进制就是将每3位换算成数字结果是:

37777777774

那么16进制就是每4位换算成数字

FFFFFFFC

说到这里就有个疑问了,按照上面的规则,-1二进制里表示 1111 1111 1111 1111 1111 1111 1111 1111

那么4294967295 数字转换成二进制也是1111 1111 1111 1111 1111 1111 1111 1111。

那么1111 1111 1111 1111 1111 1111 1111 1111到底表示哪个呢?

其实:

一段内存是连续32个1,你把它按照一个int来解读就是-1,按照unsigned int来解读就是4294967295

我们可以在c++程序中实现一下:

 int aa = ;
cout<<aa;

结果是:

当你把int aa 变成 unsigned int aa  unsigned表示无符号

那么结果就是4294967295

在c++中:

unsigned int: 4294967295(2^32-1)
signed int: 2^31-1

因为,计算机需要留一个最高位来判断你这个数字是正的还是负的。

所以Int一个数字32位下最大数字是2^31-1 你定义的超过了这数字那么计算机就会把你计算出负数了。

下面附上java写的十进制转十六进制的代码

package com.company;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import java.util.HashMap;
import java.util.Map;
import java.math.*;
import java.util.*; public class Main { static int Bin[] = new int[1000];
static char Hex[] = new char[1000];
static int _pos=0;
static int Change(char x)
{
if(x>='0'&&x<='9')
return x-'0';
else if(x=='A')
return 10;
else if(x=='B')
return 11;
else if(x=='C')
return 12;
else if(x=='D')
return 13;
else if(x=='E')
return 14;
else if(x=='F')
return 15;
else
return 16; }
//十六进制转二进制
static void HextoBin()
{
for(int i=0;i<Hex.length;i++)
{
int x= Change(Hex[i]);
int j=0;
_pos+=4;
while(x>0)
{
Bin[--_pos]=x%2;
x/=2;
j++;
}
_pos+=j; }
//是负数要减1再进行反码
if(Hex.length==8&&Hex[0]>='8')
{
int xx =-1;
for(int i=_pos-1;i>=0;i--)
{
Bin[i]+=xx; if(Bin[i]==-1)
{
Bin[i]=1;
xx =-1;
}
else
xx=0; }
for(int i=0;i<_pos;i++)
{
Bin[i]=(Bin[i]==1?0:1);
} }
} static int BintoDem()
{
int x=0;
for(int i=_pos-1;i>=0;i--)
{
x+=(Bin[i]*((int)Math.pow(2.0,_pos-1-i)));
}
return x;
} public static void main(String[] args) {
// write your code here
// HashMap<String,HashMap<String,String>> m = new HashMap<>();
System.out.println("**********输入数字,输出16进制数");
Scanner input = new Scanner(System.in);
x=input.nextInt();
DemtoBin(x);
BintoHex();
for(int i=pos2-1;i>=0;i--)
System.out.print(hex[i]); System.out.println(); //16进制为负数,必须是8位,且第一位是大于等于8的
System.out.println("***********输入16进制数,输入数字"); Hex=input.next().toCharArray();
HextoBin();
int x= BintoDem();
if(Hex.length==8&&Hex[0]>='8')
{
System.out.println("-"+x);
}
else
System.out.println(x); } static int bin[] = new int[10000];
static char hex[] = new char [10000];
static int pos2=0;
static int pos =32;
static int pos3 =0;
static int x; static void DemtoBin(int x) { //先转换为二进制
int y = Math.abs(x);
pos3=0;
while(y>0)
{
bin[pos3++]=y%2;
y/=2;
} //如果为负数,要进行反码
if (x < 0) {
for (int i = 0; i < pos; i++) {
bin[i] = (bin[i] == 1 ? 0 : 1);
}
//加1
int xx = 1;
for (int i = 0; i < pos; i++) {
bin[i] += xx;
if (bin[i] == 2) {
bin[i] = 0;
xx = 1;
} else
xx = 0;
}
if(xx==1)
bin[pos++]=xx;
} }
static char change(int x)
{
if(x>=0&&x<=9)
{
return (char)(x+48);
}
else if(x==10)
return 'A';
else if(x==11)
return 'B';
else if(x==12)
return 'C';
else if(x==13)
return 'D';
else if(x==14)
return 'E';
else if(x==15)
return 'F';
else
return 'G'; }
//二进制转16进制
static void BintoHex()
{
int len;
if(x<0) len = pos;
else
len =pos3; int j=0;int res=0;
for(int i=0;i<len;i++)
{ res+=Math.pow(2.0,j)*bin[i];
j++;
if(j==4)
{
hex[pos2++]=change(res);
res =0;
j=0;
}
} if(j!=0)
{
hex[pos2++]=change(res); } }
}

---------------------------------------更新---------------------------------

一个数字给你转换成二进制,其实不用上面那么麻烦,判断符号啥的,无论正数还是负数

都可以用位运算来解决,&1 表示判断这个数字最后一位的是0还是1,<<1 表示左移一位:

  public byte[] getIntBit(int b) {
byte[] array = new byte[32];
for (int i = 31; i >= 0; i--) {
array[i] = (byte)(b & 1);
b = (byte) (b >> 1);
}
return array;
}

Int32 最大的数值是多少???(附十进制十六进制相互转换且包含正负数的java代码)的更多相关文章

  1. 基础作业 本周没上课,但是请大家不要忘记学习。 本周请大家完成上周挑战作业的第一部分:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。 例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2] 输入: 请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。 输出 在不删除原有文件内容

    1丶 实验代码 #include<stdio.h> int main(void) { int tt,nn,i,j,c[11][11]; int flag=1; scanf("%d ...

  2. Oracle中的二进制、八进制、十进制、十六进制相互转换函数

    原文:Oracle中的二进制.八进制.十进制.十六进制相互转换函数 Oracle中的二进制.八进制.十进制.十六进制相互转换函数   今天在网上看到一篇关于在oracle中对各种进制数进行转换的帖子, ...

  3. ASCII码表(二进制 十进制 十六进制)

    css里,允许使用转义字符\+ascii16进制形式; 例如: e的ascii 16进制是65,我们就写为\65 expression -> expr\65ssion 二进制 十进制 十六进制 ...

  4. Delphi进制转换(二进制/十进制/十六进制)

    http://www.cnblogs.com/ywangzi/archive/2012/12/12/2815219.html   Delphi进制转换(二进制/十进制/十六进制)  2009-11-2 ...

  5. Python 进制转换 二进制 八进制 十进制 十六进制

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...

  6. Python进制转换(二进制/八进制/十进制/十六进制)

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义 ba ...

  7. delphi 十进制十六进制转换

    delphi有提供十进制转换成十六进制的函数: IntToStr();   返回值为String // 十进制转十六进制 var i: integer; str: string; begin i := ...

  8. SQL十进制和十六进制相互转换

    CREATE FUNCTION ufn_ConvertInt2Hex ( @Num BIGINT ) ) AS BEGIN /************************************* ...

  9. 3、颜色的字符串、十进制、十六进制相互转换(color convert between dec、hex and string )

    int color_int=***; 1.(十进制整数)转换成(十六进制的字符串) String color_hex = String.format("#%06X", (0xFFF ...

随机推荐

  1. 《Unix&Linux大学教程》学习笔记七:进程与作业控制

    1:进程:一个内存中的程序+程序所需数据+管理程序的各种状态信息. 2:进程由内核进行管理,内核使用调度器,给予进程一个时间片来运行,然后切换到下一个进程. 3:进程分叉 fork :创建一个子进程 ...

  2. js事件探秘

    Javascript中的事件,可以和html交互. 事件流 IE&Opera:事件冒泡 其他浏览器: 事件捕获 事件冒泡:事件由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传 ...

  3. 【PHP】php生成一个不重复的数字(订单号、会员号)

    1.目的:利用php的do .. while 生成一个不重复的字符串或者数组,比如(订单号.会员号) 2.不废话,代码来: $repeat_order = array(); do{ $ordersn ...

  4. 2013-2015 Aaronyang的又一总结,牧童遥指纳尼村

    我没有时间去唠叨自己的事,可是你们是我喜欢的人,ay很愿意写给你们分享:去年的万人阅读的总结链接:<没学历的IT人生没那么悲催,献给程序员们> 提前声明:本文不良反应:请自备垃圾桶,准备装 ...

  5. 12C -- ORA-01017

    本地使用使用sqlplus,尝试连接12.2数据库报错: 在另外一台服务器上,使用sqlplus连接该库,可以成功: 解决方案: 根据MOS文档id:207303.1看出,只有11.2.0.3之上的客 ...

  6. Effective Java 第三版——5. 使用依赖注入取代硬连接资源

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. hexo + Github Page 0元建立博客攻略

    传送门: 5分钟 0元搭建个人独立博客网站(一):https://mp.weixin.qq.com/s/69isJE191WV2gaVbjrwTtw 5分钟 0元搭建个人独立博客网站(二):https ...

  8. mysql 存储引擎对索引的支持

    一.首先给出mysql官方文档给出的不同存储引擎对索引的支持 从上面的图中可以得知,mysql 是支持hash索引的,但支持和不支持又和具体的存储引擎有关系.从图中看到InnoDB是支持Btree索引 ...

  9. Android adb input 命令介绍

    input命令是用来向设备发送模拟操作的命令: 因为版本不同,input命令也有所不同 以下为Android 4.0的input命令: usage:input text <string> ...

  10. 11gr2 RAC安装INS-35354问题一例

    转自:http://www.askmaclean.com/archives/11gr2-rac安装ins-35354问题一例.html 今天在安装一套11.2.0.2 RAC数据库时出现了INS-35 ...