ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Java中int占几个字节?4个字节,记住这个数,面试直接拿捏

Java中int占几个字节?4个字节,记住这个数,面试直接拿捏 数据类型它定义了变量或表达式可以存储数据的种类。java是一种强数据类型语言一、基本数据类型1.bytebyte在好些编程语言里被用来表示一个含有8位也就是1字节的整数, 因为它有8位, 鉴于此byte类型的变量所能存储的值的范围是 -128至127这种情况指的是有符号字节或者0至255。2.short用来表示16位有符号整数的short, 在内存空间中固定占用2个字节, 也就是16位。short s 100;3.intint用来表示32位有符号整数, 它固定占用4个字节, 也就是32位的内存空间。int类型的变量如果不赋初始值默认为0。4.longlong被用来表示64位有符号整数它固定占用8个字节, 也就是64位的内存空间。和int类型相比较而言 long类型通常占用更多的内存空间了, 所以它能够表示更大的整数范围。5.float存储单精度浮点数时会用到float类型, 一般情况下, 它会占用4个字节那样大小的内存空间, 也就是32位的内存空间呢。float a 3.14;6.存储的时候会用到一种类型, 这种类型是用来存双精度浮点型的, 而且它的精度要比单精度浮点数更高一些, 一般情况下, 它会占用64位的内存空间, 也就是8字节空间才对。double a 3.14159;7.类型用于表示逻辑上的真true或假false。8.charchar类型, 是用于在计算机编程语言里表示单个字符的基本数据类型, 在java当中此类型通常占用2个字节, 也就是16位的内存空间, 它能来表示ASCII码表或者码表中的字符。字符类别运用字符集编码, 它属于全球通用的定字长字符集体, 所使用的字符均有着16位。public static void main(String[] args) { char c1 中; char c2 \u4e2d; System.out.println(c1); System.out.println(c2); }//输出结果全为 中当中, u4e2d处于字符集的范围之内, 字符“中”所对应的, 是16位二进制编码的值。任何一个字符, 都能够被转化为一个整数, 这个整数的范围是从0到65535。public static void main(String[] args) { int a 中; System.out.println(a); }可以查看某个数对应着那个字符public static void main(String[] args) { char c 69; System.out.println(c); //输出结果为 E转义字符对于不方便输出的字符可以采用转义字符表示例如public static void main(String[] args) { int num 100; String json {\count\:num};// /斜杠 \反斜杠 String dataString [{\id\:\1\ ,\name\:\张三\},{\id\:\2\ ,\name\:\李四\},{\id\:\3\ ,\name\:\王五\}]; System.out.println(json); //输出结果为 {count:100} }转义字符 含义\n 表示回车\r 表示换行符\\ 表示反斜杠( \ )\ 表示单引号( )\ 表示双引号( )请你提供具体内容以便我进行改写。当前仅有“---------------------------------------------------------------------------------------------------------------------”, 无法按要求生成改写后的句子。内存空间分布二、计算机对整型数据的存储方式把整数转变为二进制, 数据类型对数据于内存里怎样存储起着决定作用, 像byte类型的大小为8bit也就是1字节, 乃是由1bit符号位以及7bit数值位共同构成的。1、二进制表示在计算机内部, 是用二进制, 也就是 0 和 1 来表示所有的数据, 这里面包含整型数据。每一个二进制位也就是 bit, 它代表着 2 的幂次方的值, 这个顺序是从右到左, 或者说是从低位到高位, 并且是依次增加的。首先, 对整数进行判断, 判断其究竟是正数, 还是负数。若是正数, 那么其符号位是0。若是负数, 那么其符号位是1。非负整数的二进制表示获取方式为除2取余法, 该方法具体是先从整数开始, 持续不断地除以2, 伴随着进行的每次此操作, 都要记录除得的余数, 这个余数要么是0, 要么是1, 一直持续到商变为0为止。接着, 把所得到的余数数列按照逆序来进行排列, 如此便生成了该整数相应的二进制表示形式。但这里尤为需要留意、上心注意的实际情形是数据当下所处的类型状况, 不同类型的数据, 其长度是不一样的, 同时最高位呈现出来的是符号位的身份形态, 要是在按照余数逆序排列情形下加入符号位之后长度并不够, 那么就要在符号位和数值之间补零, 一直补到满足其相应长度要求完毕。拆分法: 把这个数据进行拆分, 使其成为2^n次方相加的模式, 像正数的28啦, 它能够被拆分成16加上8加上4, 也就是2^4加上2^3加上2^2, 如此这般就可以转换为1 1100。2、原码、反码、补码原码, 它是符号位加上真值的绝对值, 也就是用第一位来表示符号, 其余的位用来表示值。而原码的相反数相加, 其结果并非是0。反码, 正数的反码是其自身, 负数的反码是在原码基础上, 符号位保持不变, 其余各位进行取反操作, 反码存在加零与减零的问题。补码, 对于正数而言, 其补码就是它自身, 对于负数来讲, 其补码是在原码条件下, 符号位维持不变, 其余各位进行取反操作之后再加 1也就是在反码基础上 1, 计算机内部运用补码来表示以及存储数据, 这是由于补码能够有效地处理对于正负数的加法运算。ege: 字节型变量a被赋值为10, 这是原码形式, 这是变量a的反码形式, 这则是变量a表现出来的补码形态。字节型变量b被赋值为负十 , 关于其原码 , 至于是反码 , 另外还有补码。由于数据类型对数据在内存里的存储大小作了规定, 所以针对a b的补码, 即1 0000 0000, 此时得截取数据。---1 0000 0000(补码)。0000在补码表示下转换为原码后结果是0 , 此过程中得到的结果等于0。3、溢出byte a 127 byte b 1 byte c (byte)(ab) System.out.println(c); //c的值为-128进行加法运算的两个变量, 类型为byte, 此时, 运算结果的类型, 会自动提升成为int类型。a的值是127, 此值在二进制里表示为0111, 1111。b 的值是 1在二进制中表示为 0000 0001。只要你执行a b, 鉴于类型提升, 该操作事实上是于int类型的上下文里开展的。所以, 127 1的结果为128, 在int类型的二进制表示当中, 128是0 0 0100 0000。但是, 当你试着把这个int类型的结果赋给byte类型的变量c时, 你得进行显式的类型转换, 也就是(byte)(a b)。在这个转换进程中, Java会舍弃int值的最高位, 也就是所有除了最低的8位之外的各位, 只保留最低的8位。鉴于, 128在int里的二进制呈现是0 0 0100 0000 , 当仅留住最低的8位之际 , 你所得到的为 1000 0000。在byte的情境里, 此二进制值展现出来的是 -128 , 究其原因在于 , 最高位符号位是1 , 意思是这属于一个负数, 而剩余部分的7位1000 000在二进制补码表示法子当中对应着之给128的绝对值 不过鉴于其为负数 , 故而实际数值是 -128。所以c 的值是 -128。三、计算机对浮点数数据的存储方式float: 属于单精度类型, 它由1bit、8bit、23bit以及32bit共同组成。双精度, 1bit, 11bit, 52bit, 64bit, 默认。小数转换为二进制对于小数部分, 采用乘2取整法, 也就是把小数部分乘以2, 接着取出结果的整数部分, 之后再用得到的新小数部分重复这样的过程, 一直持续到小数部分变成0或者达到所需要的精度停止。1、浮点数精度丢失public class Client { public static void main(String[] args) { System.out.println(1.2-1); //输出结果为 0.19999999999999996 不为0.2 } }原因二进制0.2----0.10011.......计算机转换0.2为二进制时, 因超过浮点数可存储的数据长度, 导致数据丢失。避免方法public class Client { public static void main(String[] args) { //System.out.println(1.2-1); BigDecimal b1 new BigDecimal(Double.toString(1.2)); //BigDecimal 精度强相关 BigDecimal b2 new BigDecimal(Double.toString(1)); Duble value b1.subtract(b2).doubleValue(); //b1.subtract(b2).doubleValue() b1减去b2 并将其值转换为double类型 System.out.println(value); ////输出结果为0.2 } }四、数据类型转换转换的方式有两种自动类型转换和强制类型转换1、自动类型转换大碗装小碗存在整型数据, 还有实型数据, 以及字符型数据, 它们能够进行混合运算, 然而在进行运算这个行为的时候, 不同类型的这些数据必须要先转化成同一类型。2、强制类型转换小碗装大碗若程序规定必须把某一类型的数据, 从该种类型强制性地转变为另一种类型, 那么就需要通过人工进行编程来实施强制类型转换, 这种转换也被称作显式转换。public class Client { public static void main(String[] args) { int a 10; byte b (byte) a; //a为int类型转换为byte类型“大碗转小碗”但是byte的取值范围为-128~127 10在这个范围当中不会丢失精度 System.out.println(b); } }
返回列表