在JAVA中一共有八种基本数据类型,他们分别是
byte、short、int、long、float、do le、char、boolean
整型
其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样
byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)
int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)
可以看到byte和short的取值范围比较小,而long的取值范围太大,占用的空间多,基本上int可以满足我们的日常的计算了,而且int也是使用的最多的整型类型了。
在通常情况下,如果JAVA中出现了一个整数数字比如35,那么这个数字就是int型的,如果我们希望它是byte型的,可以在数据后加上大写的 B:35B,表示它是byte型的,同样的35S表示short型,35L表示long型的,表示int我们可以什么都不用加,但是如果要表示long型 的,就一定要在数据后面加“L”。
浮点型
float和do le是表示浮点型的数据类型,他们之间的区别在于他们的精确度不同
float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节
do le 1.797693e+308~ 4.9000000e-324 占用8个字节
do le型比float型存储范围更大,精度更高,所以通常的浮点型的数据在不声明的情况下都是do le型的,如果要表示一个数据是float型的,可以在数据后面加上“F”。
浮点型的数据是不能完全精确的,所以有的时候在计算的时候可能会在小数点最后几位出现浮动,这是正常的。
boolean型(布尔型)
这个类型只有两个值,true和false(真和非真)
boolean t = true;
boolean f = false;
char型(文本型)
用于存放字符的数据类型,占用2个字节,采用unicode编码,它的前128字节编码与ASCII兼容
字符的存储范围在\~\?,在定义字符型的数据时候要注意加' ',比如 '1'表示字符'1'而不是数值1,
char c = ' 1 ';
我们试着输出c看看,System.out.println(c);结果就是1,而如果我们这样输出呢System.out.println(c+0);
结果却变成了49。
如果我们这样定义c看看
char c = ' \1 ';输出的结果仍然是1,这是因为字符'1'对应着unicode编码就是\1
char c1 = 'h',c2 = 'e',c3='l',c4='l',c5 = 'o';
System.out.print(c1);System.out.print(c2);System.out.print(c3);System.out.print(c4);Sytem.out.print(c5);
String
在前面我们看到过这样的定义:
String s = "hello";
System.out.println(s);跟上面的5条语句组合起来的效果是一样的,那么String是个什么呢?String是字符串,它不是基本数据类型,它是一个类。
c语言数据类型
1.整型数据类型
C定义了5种整型数据类型。
整型数据类型表
序号
类型名称
说明
字节数
取值范围
1
signed char
有符号的单字节整数类型
1
-128~+127
2
short int
短整型
2
-32768~+32767
3
int
整型
4
-2147438648~+2147438647
4
long int
长整型
4
-2147438648~+2147438647
5
long long int
长长整型
8
-9223372036854775808~+-9223372036854775807
2.无符号整数类型
对应有符号类型,还有无符号整数类型。
无符号整数类型表
序号
类型名称
字节数
取值范围
1
unsigned char
1
0~255
2
unsign short int
2
0~65535
3
unsigned int
4
0~4294967295
4
unsigned long int
4
0~4294967295
5
unsign long long int
8
0~18446744073709551615
3.整型常量
整型常量是指用以表示整型数值的常量,分为短整型(short int)、整型(int)、长整型(long int )和长长整型(long long int)四种。C默认整型(int)。 各种类型整型常量进制表示表(后缀不区分大小写)
序号
数据类型
八进制
十进制
十六进制
1
整型
0112
74
0x4a
2
长整型(l)
0112l
74l
0x4al
3
长长整型(ll)
0112ll
74ll
0x4all
4
无符号整型(u)
0112u
74u
0x4au
5
无符号长整型(ul)
0112ul
74ul
0x4aul
6
无符号长长整型(ull)
0112ull
74ull
0x4aull
4.字符数据类型
C语言中字符型数据只有一种,即char型数据。一般也把char直接称为字符型。字符型占用内存空间最少,一般占用一个字节,存储在char类型变量的整数可以表示为有符号或无符号的值,这取决于编译器。
5.字符变量
字符变量是用于存储字符型数值的变量。字符型变量也分为两种:有符号和无符号型。
6.浮点型数据类型
C语言定义了三种浮点数据类型:
?float,单精度
?do le,双精度
?long do le,长双精度
C标准中对不同类型的浮点数有不同的规定,编译器不同或硬件条件不同,字节长度也不相同。
浮点型的字节长度、精度、数量级范围和输出输入格式表
序号
数据类型
字节长度
精度
数量级范围
printf和scanf格式
1
float(f)
4
7
-38~38
%f
2
do le
8
约16
-308~308
%f
3
long do le(1)
12
约19
-4932~4932
%llf
7.浮点型精度
浮点型精度从低到高排列为float、do le和long long do le。
8.浮点型的存储方式
浮点型数值以科学计数法的表示形式存储在内存中。浮点型的内存形式包含三个部分:
1)符号位
符号位浮点型的符号位只有一位,为最高位。该位为1,表示负数,该位为0,为非负数。
2)指数位
浮点型的指数位以补码形式存储,是科学计数法的指数部分。
3)基数位
基数位是浮点型的最后一位,这个位决定数值的精度。
浮点型储存分段表
序号
数据类型
符号位
指数位
基数位
偏差值
1
float
1
8
23
127
2
do le
1
11
52
1023
3
long do le
1
15
64
16383
c++语言基本数据类型
C++基本数据类型有字符型(char)、整数类型(int)、浮点型(float)、双精度型(do le)和无值类型(void),下表给出各种基本类型和内存中的位数和表示数值的范围(对于字符型存储的是ASCII码):
基本数据类型
类型
类型名
位数
范围
字符型
char
8
-128 ------ 127
整型
int
16
-32768 ------ 32767
浮点型
float
32
3.4E-38 ------ 3.4E+38
双精度型
do le
64
1.7E-308 ------ 1.7E+308
无值类型
void
0
0
类型名前可以加修饰符(void类型除外),修饰符有 signed(带符号的)、 unsigned(无符号的)、 short(短的)和 long(长的)。signed 和 unsigned 用于字符型或整型,short 和 long 可用于整型,还可用于双精度型,如下表所示:
基本数据类型和修饰符
类型
类型名
位数
范围
字符型
char
8
-128 ------ 127
signed char
8
-128 ------ 127
unsigned char
8
0 ------ 255
整型
int
16
-32768 ------ 32767
signed int
16
-32768 ------ 32767
unsigned int
16
0 ------ 65535
short int
16
-32768 ------ 32767
signed short int
16
-32768 ------ 32767
unsigned short int
16
0 ------ 65535
long int
32
-2,147,483,648 ---- 2,147,483,647
signed long int
32
-2,147,483,648 ---- 2,147,483,647
unsigned long int
32
0 ----------------4,294,967,295
浮点型
float
32
3.4E-38 ------ 3.4E+38
双精度型
do le
64
1.7E-308 ------ 1.7E+308
long do le
80
3.4E-4932 ------ 1.1E+4932
当用 signed 、unsigned 、short 和 long 修饰 int 时,int 可省略。
字符型实际上是一个字节的整型,浮点型和双精度型表示实数。
注:不同编译系统,整数的存储长度不同。对于16位的编译系统,int为2字节;而对于32位的编译系统,int为4字节。可以用sizeof运算符测试。如:
cout<
输出结果是字节数。
再如:long 是32位, int 在 32位系统上是32位,但在以后的64位系统上是64的
应用:
网络通信程序中经常用unsigned char 来定义一块内存,即缓冲区。char 是有符号的 ,unsigned char 是无符号的。
char 整数范围为-128到127( 0x80__0x7F), 而unsigned char 整数范围为0到255( 0__0xFF )。
其实分出个正负是由于char类型在内存中的存储形式与int类型相同(或说相似),也正是由于此点char类型的值可以与int类型(包括unsigned,short等)的值通用。当然要注意表示的范围。char可以看成是单字节的整数,而int类型最低也得要两个字节(本处说int时代指了所有的整型类型)。当要用单字节表示整数时(以节省内存)就得用char。更为重要的是英文字母ASCII中都小于0x80,0x80以上的字符都是非英文字符及制表符(当然包括汉字及其他国家的字符)。而对于char来说最大只能表示到0x7F(127),要想表示非英文字符就要大于0x7F,因而也也必须要产生一个unsigned
char(它的范围大于0X7F)。
请看以下的简单示例:
#include
#include
void main()
{
int nCount=0;
//char*p="abcd汉字";
char p[]="abcd汉字";
int len=strlen(p);
int num=0;
for(int i=0;i
{
if((unsigned char)p[i]>0x7F)
{
i++;
num++;
}
nCount++;
}
printf("字符串 \"%s\" 长度为 %d 字节,共有 %d 个字符,其中汉字字符有 %d 个。\n",p,len,nCount,num);
左移:<<
低位补零,高位舍弃。
对于左移运算,逻辑左移和算术左移结果一样。
右移:>>
右移要注意符号位问题。
对于无符号数,右移时高位补零。
对于有符号数,如果该数为正,同无符号数。如果该数为负,有的编译器高位补零(逻辑右移),有的编译器高位补一(算术右移)。所以一般认为,一个程序如果使用了有符号数的右移位操作,它就是不可移植的。而且所有的位移操作的右操作数必须小于左操作数的位长度,否则结果未定义,即移动的位数必须小于数本身的位数,否则就相当于没有移位
补充:
由于JAVA中没有无符号数,所以JAVA中的 >> 表示算术右移,如果是要进行逻辑右移的话可以使用 >>> 运算符。
通信格式转换
Java和一些windows
需要进行相应的转换,这里就用到了移位,这些数据通常被定义为unsigned int,unsigned char,unsigned short之类,
高、低字节之间的转换
windows的字节序为低字节开头
linux,unix的字节序为高字节开头
java则无论平台变化,都是高字节开头