精华内容
下载资源
问答
  • 运算 其实这篇博客不是来讲运算,但是涉及到二进制,就顺便讲一下。

    数据的二进制表示

    以下先以java中的byte类型为模板将(长度短,代码好写。。。)

    	byte b1 = (byte) 0b00000000;//0b表示后面的数据用二进制表示,0为八进制,0x为十六进制,十进制不带前缀
    	byte b2 = (byte) 0b10000000;
    	byte b3 = (byte) 0b11111111;
    	System.out.println(b1);
    	System.out.println(b2);
    	System.out.println(b3);
    	//以上的输出结果为0、-128、-1
    

    为何二进制与数据是这么对应的?个人理解是方便计算机进行运算。试想以下情况:
    有一个数x的值为-128,我们使x加一变为-127,如果-128的二进制表示为0b11111111,那么-127应当为0b11111110,虽然值+1,但是二进制表示却是-1,底层不符合逻辑。所以逻辑一点,表面上既然+1,那底层最好也+1,所以-128用0b10000000来表示更合理,-127则相应的为0b10000001,底层的确比-128大1。
    以这种方法表示,0b11111111则表示-1,而-1加一之后为0,二进制加一为0b100000000(8个0),因为byte长度为一个字节,即只有8bits,溢出的1被舍去,剩下为0b00000000,正好为0,符合-1+1=0。

    数据类型转换

    上面的东西看完之后,我们进入正题。
    之前我正在用java来实现通信,期间需要将各种数据与byte类型进行转换,而在将byte型转成int型数据时发现了一件事情。以如下代码为例:

    	byte b = (byte) 0xff;//即255
    	System.out.println(b);
    	System.out.println((int) b);
    	System.out.println(b & 0xff);
    	System.out.println((int) (b & 0xff));
    	System.out.println(b | 0x00);
    	System.out.println((int) (b | 0x00));
    

    三行输出分别为-1、-1、255、255、-1、-1
    真是一件很令人头疼的事
    我们先得出以下结论:

    1. 是否进行强制类型转换对结果没有影响
    2. byte型数据与0进行或("|")运算不会使输出结果发生改变(即以byte类型输出,值域为-128~127)
    3. byte型数据与0xff(相对于8bits的数据来说即各位全是1)进行与("&")运算,会以比byte值域更大的域来输出,输出的数据明显超过了byte的值域

    现在我们来看看下面这种情况:

    	byte b = (byte) 0xff;
    	int num = (int) b;
    	System.out.println(num );
    	System.out.println(num  & 0xff);
    	System.out.println(num  & 0xffff);
    	System.out.println(num  & 0xffffffff);
    	System.out.println(num  | 0x00);
    

    我们提前将byte类型转换成了int类型,输出结果如下:-1、255、65535、-1、-1
    显然,num的二进制表示为0b111111111111111111111111(32个1)
    我们又得出以下结论:

    1. byte型转换成int型时(可以拓展为短数据类型转换成长数据类型),会保持值不变(负数高位补1,正数高位补0)
    2. 与上面相反,将int型转换成byte型时(长变短),如果发生溢值,则会舍弃高位,保留低位

    以上就是我进行的全部测试
    但是这里还有一个问题没有解决,希望有大神能给我一些帮助:
    为什么b & 0xffb | 0x00的值不一样,理论上两者都不会使值发生变化

    至此,我想讲的就讲完了,谢谢大家的阅读。

    展开全文
  • 补码运算规则:二进制最高符号,0正数,1负数 正数是本身,负数最高不变号,其他为逐取反再加1 两数相加时,符号若进位,舍弃如0101(5)+1101(-3)=0010(2) 计算机正数与负数关系是取反加1 正数加...

    补码运算规则:二进制最高位符号位,0正数,1负数

    正数是本身,负数最高位不变号,其他为逐位取反再加1

    两数相加时,符号位若进位,舍弃如0101(5)+1101(-3)=0010(2)

    计算机正数与负数关系是取反加1

    正数加负数等于模(某种数据类型的总数)

     


    Java的四种整数类型:byte int short long    Java默认整数计算结果为int                  证书的字面量是int型

    若字面量超过int最大,则字面量为long后面要用L 或l表示long型

    变量与数据类型:

    byte b1=5;
    byte b2=b1+3;
    此时会出现语句错误,自己额类型中出现int:修改强转为:byte b2=(byte) (b1+3)或者int b2=b1+3;则可

    如果byte  b2=1+3;,保存的是字节类型4,如果byte  b2=155+3;在此错误(超过byte最大值127),应强制转换为byte  b2=(byte) (155+3);


    展开全文
  • java二进制编码以及数据类型转换

    千次阅读 2019-02-18 16:10:25
    一、 java基本数据类型  1.基本数据类型位数(字节数) 位数 1字节(8) 2字节(16) 4字节(32) 8字节(64) 类型 byte short int long   boolean char float...

    一、 java的基本数据类型

     1.基本数据类型位数(字节数)

    位数 1字节(8位) 2字节(16位) 4字节(32位) 8字节(64位)
    类型 byte short int long
      boolean char float double

    2.基本数据类型范围

    要记住byte的取值范围为   -128~127

     (1)float的表示

                

     符号位(1 bit) 指数(8 bit) 尾数(23 bit)

    (2)double的表示

    符号位(1 bit) 指数(11 bit) 尾数(52 bit)

    所以,float和double都是可以表示正数和负数的

     

    3.原码、反码、补码

    二进制最高位为符号位,正数的原码,反码,补码相同

    负数的反码:符号位不变,其余位取反

    负数的补码:在反码基础上加1 

    java中用补码表示负数(强转计算的时候用的到)

    例1. 以7和-7为例

    7的原码,反码,补码 都是 0000  0111 最高位0表示正数

    -7的原码反码补码对比:

    7的原码 : 0000  0111

    -7的原码:1000   0111

    -7的反码:1111   1000

    -7的补码:1111   1001

    例2.   -1,0,1的表示

    java用补码表示二进制数

    -1的补码:1111  1111

    0的补码: 0000 0000

    1的补码: 0000 0001

    二、数据类型转换

    1.自动类型转换

    (1)不同类型进行计算时,会自动向范围高的数据类型自动转换

    特别注意:byte,short和char参加计算时,会自动提升为int参加计算

    比如 A.  byte+byte,会把两个byte转换成int参加计算

             B.byte+short  也会把两个转换成int参加计算

    (2)特别需要关注的是long和float的数据范围:

             float是32位,long是64位的,但是float表示的数字范围要大于long

            所以记得整型会向浮点型自动转换就行了

    (3)举例:byte b, b1,b2;   b1=1;b2=2; b=b1+b2;会报错吗?

    分析:byte 类型参与计算的时候提升为int,所以b1+b2是int类型,赋值给byte类型b会报错

      2.强制类型转换

    A. 以 (byte)129 输出为-127为例

    129在java中的二进制表示
    0000  0000 | 0000 0000 | 0000 0000 | ‭1000 0001‬
    (byte)129 强制转换后,byte是8位,则取最后8位  1000 0001‬

    1000 0001‬是补码表示,最高位为符号位1说明是负数,

    补码1000 0001‬对应反码为1000 0000

    对应原码为1111 1111     还原数字为-127

    B.以 (byte)150 输出为-106为例

    150在java中的二进制表示
    0000  0000 | 0000 0000 | 0000 0000 | ‭‭10010110‬

    强制转换为byte后,取最后8位 10010110‬

    10010110‬是补码,最高位为1说明是负数,

    10010110‬还原为反码减一,为10010101

    10010101还原为原码为11101010,对应-106

    C.第三个例子,short类型最大值32767,  (byte)32769  和(short)32769的输出值

    ‭0000  0000 | 0000 0000 |1000 0000 | 0000 0001       //32769的二进制表示

    0000 0001                                                                  //(byte)32769的二进制表示,最高位为0,正数,值为1

    1000 0000 | 0000 0001                                             //(short)32769的二进制表示,最高位为1,负数,此为补码

    1000 0000 | 0000 0000                                             //(short)32769的反码

    1111 1111| 1111 1111                                            //(short)32769的原码,-32767

    所以  (byte)32769为1 ,(short)32769输出为 -32767

    三、总结

    1.记住八种数据类型位数,字节数

    2.byte的取值范围为   -128~127

    3.自动类型转换顺序需要记住,float+long会向float转换,虽然long是64位的

    4.byte ,char,short参加自动提升的时候,都是转变为int类型,byte+byte也是int类型

    5.java中用补码表示负数,可以理解为java中的正数,负数都是用补码表示

    6.强制转换时候,会取二进制数,对应的后几位为最终值(补码),然后计算补码对应的原值

     

     

     

    展开全文
  • (如果范围大转范围小的类型,那么会丢失精度,只截取相应位数,具体转化需要将类型用0和1的二进制表示,然后截取相应的位,向下转型。) 3、分支结构 单分支判断 //()内为true就执行{}内容,反之略过 if(){...

    1、二进制

    1. 原码
      在这里插入图片描述
      存在问题
      在这里插入图片描述

    2. 反码

    在这里插入图片描述
    存在问题
    在这里插入图片描述

    1. 补码
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    2、数据类型转换

    在这里插入图片描述
    输出cc的值,为30;
    (如果范围大的转范围小的类型,那么会丢失精度,只截取相应位数,具体转化需要将类型用0和1的二进制表示,然后截取相应的位,向下转型。)

    3、分支结构

    1. 单分支判断
    //()内为true就执行{}内容,反之略过
    if(){
    }
    
    1. 双分支判断
    //if里面内容为true就执行第一个{}内容,反之执行else的
    if(){
    	}
    else {
    	}
    
    1. switch多分支
    char ch ='a';
    switch(ch){
    	case 'a':
    	System.out.println(1);
    	break;
    	case 'b':
    	System.out.println(2;
    	break;
    	//默认的选择,可有可无,以上的情况没对时候,default情况
    	default :
    	System.out.println(3);
    }
    
    展开全文
  • 目录1 数据类型1.3 二进制位运算符1.3.1 进制或运算符1.3.2 二进制与运算符1.3.3 二进制否运算符1.3.4 异或运算符1.3.5 左移运算符1.3.6 右移运算符1.3.7 头部补零右移运算符1.3.8 开关作用(应用场景) 1 数据...
  • 一、各数据类型的最大值和最小值整数:以byte为例,我们知道,byte共有8个bit,最大值是0111111,最小值是10000000,用十进制来表示就是-128~127,即-2^7~2^7。依照上面推理方式可知总结下表:数据类型bit取值...
  • 二进制数据类型

    2014-04-16 16:57:16
     Binary 数据类型既可以是固定长度(Binary),也可以是变长度。   Binary[(n)] 是 n 固定的二进制数据。其中,n 取值范围是从 1 到 8000。其存储窨大小是 n + 4 个字节。   Varbinary[(n...
  • 一、各数据类型的最大值和最小值整数:以byte为例,我们知道,byte共有8个bit,最大值是0111111,最小值是10000000,用十进制来表示就是-128~127,即-2^7~2^7。依照上面推理方式可知总结下表:数据类型bit取值...
  • 虽然一直很头疼二进制的问题,主要是搞不清各种类型和补码啊之类的,可是发现用二进制位的操作算法解决一些算法题还是很方便的。。。。。 首先,(1)最经典的,交换两个整形变量,一般做法是借助第三个变量,但是用...
  • 在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容。解析的时候,往往是一个字节(Byte)占用8个(bit),高位4bit 表示一个十六进制数据,低位4bit 表示...
  • 目录 JDK自带进制转换 ...java中可以直接声明二进制、八进制、十进制、十六进制 例如: 二级制: int bin = 0b1100010; 八进制: int oct = 0142; 十进制: int dec = 98; 十六进制: int hex = 0x
  • 相同位的两个数字都为1,则为1;若有一个不为1,则为0. 例如一个数&1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,最末位为1表示该数为奇数。 按位或(|) 相同位只要一个为1即为1。通常用于二进制...
  • 在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容。解析的时候,往往是一个字节(Byte)占用8个(bit),高位4bit 表示一个十六进制数据,低位4bit ...
  • 概述本文主要介绍java基础类型的二进制转换和二进制的基本概念。二进制:1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1。2,在计算机当中其它进制算法基本基于2进制,因为计算机只认识0和1,比如16进制数则意味...
  • 前言:本文主要介绍java基础类型的二进制转换和二进制的基本概念。二进制:1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1。2,在计算机当中其它进制算法基本基于2进制,因为计算机只认识0和1,比如16进制数则...
  • 1:进制转换 转换规则: 先把数据的每一系数乘以对应基数次幂... 例: 十进制13对应的二进制数据是1101    二进制到十进制技巧(8421码) 十进制到八进制: 除8取余,直到商为0,最后将余数反转  例: ...
  • 二进制与Java中基本数据类型 简介 二进制 0 1 逢二进一 二进制优点: 技术容易实现:高电压1,低电压0 传输可靠性高 适合逻辑运算:真1,假0 运算规则简单 二进制的缺点: 表示数时位数太多 可读性差,难于记忆...
  • 本文所用环境:Python 3.6.5 |Anaconda custom (64-bit)|引言由于某些原因,需要用python读取二进制文件,这里主要用到struct包,而这个包里面方法主要是unpack、pack、calcsize。...二进制数据转...
  • 254的二进制:0000 0000 0000 0000 0000 0000 1111 1110 浮点数存储:按照科学计数法方式存储。其中,表示方式为:第一为0,后面为小数点后面整数部分,再往后为指数部分,如下例:实际表示方式为0.314 * 10^...
  • /*从值域0被改为1的结点或最高二进制位的结点后移*/ while(r!=NULL) { /*将后面所有的结点的值域赋值为0*/ r->data=0; r=r->next; } } /*主函数*/ void main() { LinkList L_1,L_2; ...
  • 一、各数据类型的最大值和最小值整数:以byte为例,我们知道,byte共有8个bit,最大值是0111111,最小值是10000000,用十进制来表示就是-128~127,即-2^7~2^7。依照上面推理方式可知总结下表:数据类型bit取值...
  • 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。  b.进位制/位置计数法是一种记数方式,故亦称进位记数法/值计数法,可以用有限数字符号代表所有数值。可使用...
  • 一: 进制转换  在计算机中, 数据都是以0和1来表示  进制: 进位制  十进制: 数字由0~9这10个数字来表示, 逢10进1  0 1 2 3 4 5 6 7 8 9 10  二进制: 数字由0和1这两个数字来表示, 逢2进1  0 1 10 11 ...
  • MySQL 支持两类字符型数据:...下表中列出了 MySQL 中的二进制数据类型,括号中M表示可以为其指定长度。 类型名称 说明 存储需求 BIT(M) 字段类型 大约 (M+7)/8 字节 BINARY(M) 固定长度二进制字符串 M
  • * @param num 需要转换int类型数据 * @param digits 要转换的二进制位数,位数不足则在前面补0 * @return 二进制的字符串形式 */ public static String toBinary(int num, int digits) { String cove...
  • bit类型首先,bit 类型不是对应true和false,也不是只有一,而是0和1组成串,即存储二进制的序列示例1 新建数据表testCREATE TABLE `test` (`id` int(20) NOT NULL,`codes` bit(8) NOT NULL,`remark` varchar(32...
  • 1.原码反码补码 (1)0正1负 (2)正数的原码反码补码都相同 (3)负数的反码是对其原码逐取反...(1)整数型 (整数默认的数据类型int) byte 占一个字节 -128到127 注:byte为什么在-128到127之间,首先...
  • 二进制数据解析 + byteArray类型 一个字节有8 0000 0000,并以二进制存在,故一个位置可以存储0,1数据。所以当位置全部填充为1时候,为最大数字255. uint无符号型整数型,int为有符号型整数型。这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,004
精华内容 2,001
关键字:

二进制位的数据类型