标签:
C语言中不同字长的机器和编译器会分配不同字节大小.
long类型是唯一与机器相关的.
32位机器上C语言的整数数据类型的典型取值范围
负数的取值范围比正数大1
C data type | Minimum | Maximum |
---|---|---|
char | ?128 | 127 |
unsigned char | 0 | 255 |
short [ int ] | ?32,768 | 32,767 |
unsigned short [ int ] | 0 | 65,535 |
int | ?2,147,483,648 | 2,147,483,647 |
unsigned [ int ] | 0 | 4,294,967,295 |
long [ int ] | ?2,147,483,648 | 2,147,483,647 |
unsigned long [ int ] | 0 | 4,294,967,295 |
long long [ int ] | ?9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
unsigned long long [ int ] | 0 | 18,446,744,073,709,551,615 |
64位机器上C语言的整数数据类型的典型取值范围
负数的取值范围比正数大1
C data type | Minimum | Maximum |
---|---|---|
char | ?128 | 127 |
unsigned char | 0 | 255 |
short [ int ] | ?32,768 | 32,767 |
unsigned short [ int ] | 0 | 65,535 |
int | ?2,147,483,648 | 2,147,483,647 |
unsigned [ int ] | 0 | 4,294,967,295 |
long [ int ] | ?9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
unsigned long [ int ] | 0 | 18,446,744,073,709,551,615 |
long long [ int ] | ?9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
unsigned long long [ int ] | 0 | 18,446,744,073,709,551,615 |
C语言的整数数据类型的保证的取值范围
取值范围是对称的
C data type | Minimum | Maximum |
---|---|---|
char | ?128 | 127 |
unsigned char | 0 | 255 |
short [ int ] | ?32,767 | 32,767 |
unsigned short [ int ] | 0 | 65,535 |
int | ?32,767 | 32,767 |
unsigned [ int ] | 0 | 65,535 |
long [ int ] | ?2,147,483,647 | 2,147,483,647 |
unsigned long [ int ] | 0 | 4,294,967,295 |
long long [ int ] | ?9,223,372,036,854,775,807 | 9,223,372,036,854,775,807 |
unsigned long long [ int ] | 0 | 18,446,744,073,709,551,615 |
补充:C/C++支持有符号和无符号,Java只支持有符号
用
计算机表示负数通常是补码形式
用
由于0是属于非复数的那么,表示正数的数就少了一个
原码简单,适用于乘除运算,但用原码表示的数进行加减法运算比较复杂。
补码,减法运算可以用加法来实现,例如 [X-Y]补 = [X]补 +[-Y]补,
而且,数的符号位也可以参与运算,便于运算结果的正负及是否溢出判断。
因此在计算机中大都采用补码来进行加减及乘除运算。
(不仅是整数,小数亦可用补码表示)
有某个确定大小的表现编码据类型非常重要
例如
让数据类型与协议指定的数据类型兼容是非常重要的
Java要求补码表示,取值与《64位机器上C语言的整数数据类型的典型取值范围 》一样。单字节用byte,没有long long。
C语言中将short int 转换成unsight short,会改变数值而不改变位模式
比如
-12345(补码) 二进制:1100 1111 1100 0111
转换成无符号
53191(无符号) 二进制:1100 1111 1100 0111
有符号转换无符号
无符号装换有符号
总的来说对于w位的数字
运算时,运算符两边如果一个是有符号数,一个是无符号数,那么有符号数会自定转换成无符号.这种转换在逻辑运算中将显得不直观
无符号数如果经过运算变成负数,在计算机中会被认为是一个很大的无符号数.这种特性可能成为计算机的安全隐患.为了防止这种问题,绝不使用无符号
标签:
原文地址:http://www.cnblogs.com/Recoding/p/4695487.html