-
C/C++ int、long int 、long long、、 short int 、无符号整型取值范围,代码测试 、C语言无符号整型输出
2020-06-28 10:28:40类型 存储字节 表示范围 无符号范围 大概范围 int / long int 4...类型 存储字节 表示范围 无符号范围 大概范围 int / long int 4 -2147483648~2147483647 4294967295 大概10^9 long long 8 -9223372036854775808~+9223372036854775807 1.84467440737e19 大概10^19 short int 2 -32768~+32767 65535 大概10^4 int main(){ printf("int size: %lu byte\n",sizeof(int)); printf("short size: %lu byte\n",sizeof(short int)); printf("long size: %lu byte\n",sizeof(long int)); printf("long long size: %lu byte\n",sizeof(long long int)); return 0; }
输出结果
C语言无符号整型输出:把%d->%u
unsigned int example; example=3147483650; printf("%u\n",example); printf("unsigned int size: %lu byte\n",sizeof(unsigned int));
-
C语言整型——整型的取值范围:(一)无符号整型的取值范围
2020-10-18 10:28:05文章目录`limits.h` 的不足有符号整型的编码计算方法需要注意的地方以 int 传递 short取模位移 limits.h 的不足 通过库 limits.h 中的常量,我们可以得知绝大多数整型的范围。但是其中并没有 long long 类型的取值...limits.h
的不足通过库
limits.h
中的常量,我们可以得知绝大多数整型的范围。但是其中并没有long long
类型的取值范围。在 C++ 的库climits
中定义了常量LLONG_MIN, LLONG_MAX, ULLONG_MAX
,但是这并不在 C 语言的范畴中。我们希望有一种方法,可以得到 C 语言中任意整型数据的取值范围。根据编码的原理的不同,有符号类型和无符号类型要分开讨论。我们先讨论有符号整型。
有符号整型的编码
假设用 位(以下例子中 )来存储一个整数,用最高位作为符号位,那么这个整数的取值范围应当是 考虑到,实际取值范围是
正数的编码就是其本身的二进制数,所以 的二进制数就是 01111111,而负数采用补码的方式存储,是其原码非符号位取反加一。例如 的原码为 10000001,反码为11111110,补码为 1111111
则 的原码为 1111111,反码为 10000000,补码为 1000001。整数每-1,原码就+1,反码就-1,补码也-1。
这样又体现了补码的好处。因为按照原码, 是无法表示的,那么 也就无法表示。某种角度上说也是因为原码有 ,即就是 10000000 的存在。相应的反码也有这样的问题,因为在反码中 11111111 被 所使用,导致 就已经到了 。但是在补码中,我们有 10000001-1=10000000,用 10000000 来表示 就十分的平凡了。
计算方法
也就是说,8位整型的最小值为10000000,最大值为01111111。通过二进制运算
1<<7
和~(1<<7)
我们可以分别得到这两个数。将这种方法拓展,则有符号整型的最小值和最大值分别为
1<<sizeof(type) - 1,~(1<<sizeof(type) - 1)
需要注意的是,有时 long 和 long long 的位数高于 int。我们不妨假设分别为16、32、64位。1 默认是一个 int 类型的数,在
1<<31
时会溢出而丢弃最高位,得到0的结果。所以我们应当使用1L<<sizeof(long) - 1
和1LL<<sizeof(long long) - 1
的方法。但是 C 总是充满了奇奇怪怪的特例。
需要注意的地方
以 int 传递 short
首先要说的就是在传参的时候,short 类型会以 int 类型来传递。这可能是因为 int 往往是一个计算机的字长,具有更高的传输效率。例子如下:
short int b = 1; printf("%hd, %d\n", b<<16, b<<16); printf("%d, %lld\n", 1<<32, 1<<32); // 输出结果: // 0, 65536 // 0, 0
这是因为
b<<16
实际上是作为一个int被传输,就使得其并没有产生之前的溢出归零的问题。取模位移
另一个特例是,如果变量向左移位多于存储位数,会对存储位数取模然后移位。但是常量和short不会。如下:
short a = 1; int b = 1; long c = 1; long long d = 1; printf("%hd\n", a<<18); printf("%d, %d\n", 1<<34, b<<34); printf("%ld, %ld\n", 1L<<34, c<<34); printf("%lld, %lld\n", 1LL<<66, d<<66); // 输出结果: // 0 // 0, 4 // 0, 4 // 0, 4
并且short不取模,不是因为它作为
printf()
的参数以int被传输,而是它真的不会取模。如下所示:short a = 1, aa = 3; aa = a<<18; printf("%hd, %hd\n", a<<18, aa); // 输出结果: // 0, 0
-
mysql+整型取值范围_mysql中整数字段不同类型的取值范围
2021-01-27 02:07:30mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,整数(int)字段类型分有符号和无符号两种(UNSIGNED属性就是将数字类型无符号化,与C、C++这些程序语言中的unsigned含义相同。例如,INT的类型范围是-2...mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,整数(int)字段类型分有符号和无符号两种(UNSIGNED属性就是将数字类型无符号化,与C、C++这些程序语言中的unsigned含义相同。例如,INT的类型范围是-2 147 483 648 ~ 2 147 483 647, INT UNSIGNED的范围类型就是0 ~ 4 294 967 295。),有关mysql整型bigint、int、mediumint、smallint 和 tinyint的语法介绍,如下:1、bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到
18446744073709551615。一位为 8 个字节。
2、int
一个正常大小整数。有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295。一位大小为 4 个字节。
int 的 SQL-92 同义词为 integer。
3、mediumint
一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215。 一位大小为3个字节。
4、smallint
一个小整数。有符号的范围是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据,无符号的范围是0到65535。一位大小为 2 个字节。MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
5、tinyint
有符号的范围是-128 - 127,无符号的范围是 从 0 到 255 的整型数据。一位大小为 1 字节。
注意,所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!注意,当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是<=24,对一个双精度浮点数,是在25 和53之间,这些类型如FLOAT和DOUBLE类型马上在下面描述。FLOAT(X)有对应的FLOAT和DOUBLE相同的范围,但是显示尺寸和小数位数是未定义的。在MySQL3.23中,这是一个真正的浮点值。在更早的MySQL版本中,FLOAT(precision)总是有2位小数。该句法为了ODBC兼容性而提供。
MySQL中各数据类型的取值范围
TINYINT
-128 - 127
TINYINT UNSIGNED
0 - 255
SMALLINT
-32768 - 32767
SMALLINT UNSIGNED
0 - 65535
MEDIUMINT
-8388608 - 8388607
MEDIUMINT UNSIGNED
0 - 16777215
INT 或 INTEGER
-2147483648 - 2147483647
INT UNSIGNED 或 INTEGER UNSIGNED
0 - 4294967295
BIGINT
-9223372036854775808 - 9223372036854775807
BIGINT UNSIGNED
0 - 18446744073709551615
FLOAT
-3.402823466E+38 - -1.175494351E-38,0,1.175494351E-38 - 3.402823466E+38
DOUBLE 或 DOUBLE PRECISION 或 REAL
-1.7976931348623157E+308 - -2.2250738585072014E-308,0,2.2250738585072014E-308 - 1.7976931348623157E+308
DECIMAL[(M,[D])] 或 NUMERIC(M,D)
由M(整个数字的长度,包括小数点,小数点左边的位数,小数点右边的位数,但不包括负号)和D(小数点右边的位数)来决定,M缺省为10,D缺省为0
DATE
1000-01-01 - 9999-12-31
DATETIME
1000-01-01 00:00:00 - 9999-12-31 23:59:59
TIMESTAMP
1970-01-01 00:00:00 - 2037年的某天(具体是哪天我也不知道,呵呵)
TIME
-838:59:59' to 838:59:59
YEAR[(2|4)]
缺省为4位格式,4位格式取值范围为1901 - 2155,0000,2位格式取值范围为70-69(1970-2069)
CHAR(M) [BINARY] 或 NCHAR(M) [BINARY]
M的范围为1 - 255,如果没有BINARY项,则不分大小写,NCHAR表示使用缺省的字符集.在数据库中以空格补足,但在取出来时末尾的空格将自动去掉.
[NATIONAL] VARCHAR(M) [BINARY]
M的范围为1 - 255.在数据库中末尾的空格将自动去掉.
TINYBLOB 或 TINYTEXT
255(2^8-1)个字符
BLOB 或 TEXT
65535(2^16-1)个字符
MEDIUMBLOB 或 MEDIUMTEXT
16777215 (2^24-1)个字符
LONGBLOB 或 LONGTEXT
4294967295 (2^32-1)个字符
ENUM('value1','value2',...)
可以总共有65535个不同的值
SET('value1','value2',...)
最多有64个成员
原文:https://www.iteye.com/blog/wayne173-1631095
-
C语言中16位整型数据的取值范围
2019-08-21 17:16:37本文介绍C语言中16位整型数据的取值范围。 1. 无符号16位整型数据 对于无符号(unsigned)型数据,存储单元中全部二进位(bit)都用作存放数本身,而不包括符号。...所以,无符号16位整型数据的取值范围是0到655...本文介绍C语言中16位整型数据的取值范围。
1. 无符号16位整型数据
对于无符号(unsigned)型数据,存储单元中全部二进位(bit)都用作存放数本身,而不包括符号。所以对于16位整型,取值范围如下:
0000 0000 0000 0000 到 1111 1111 1111 1111
对应的十进制数为0到65535(即216-1)。
所以,无符号16位整型数据的取值范围是0到65535。
说明:无符号整型变量只能存放不带符号的整数,如123、4567等,而不能存放负数。
2. 有符号16位整型数据
对于有符号(signed)整型,存储单元中最高位代表符号位:0为正,1为负。
a)当最高位为0,即代表正数时,取值范围如下:
0000 0000 0000 0001 到 0111 1111 1111 1111
对应的十进制数为1到32767(即215-1)。
b)当最高位为1,即代表负数时,取值范围如下(以补码形式表示):
1000 0000 0000 0000 到 1111 1111 1111 1111
对应的十进制数为-32768(即-215)到-1。
所以,有符号16位整型数据的取值范围是-32768到32767。
———————————————— 分割线 —————————————————
备注:为了更好地理解符号位为1,即数值为负时的取值范围,在此处对-1和-32768的原码和补码进行计算并解释。
1. 计算-1的补码:
a)1的原码:0000 0000 0000 0001;
b)取反:1111 1111 1111 1110;
c)加1:1111 1111 1111 1111。
所以,-1的补码为1111 1111 1111 1111。
2. 计算-1的原码:
a)除符号位,其余位取反:1000 0000 0000 0000
b)加1:1000 0000 0000 0001
所以,-1的原码为1000 0000 0000 0001。
3. 计算-32768的补码:
a)32768的原码:(00) 1000 0000 0000 0000
b)取反:(11) 0111 1111 1111 1111
c)加1:(11) 1000 0000 0000 0000
所以,-32768的补码为(11) 1000 0000 0000 0000
说明:
1. 括号中的00、11,表示更高位置的符号位,在某些情况下,使用(显示)更高位置的符号位可以清晰地表达计算过程;
2. 在上述的补码结果中可以看出,如果不使用更高位置的符号位“(11)”的情况下,即-32768的补码为1000 0000 0000 0000时,最高位的1既代表了符号位,同时也代表了数值位;而如果使用更为位置的符号位“(11)”的情况下,即-32768的补码为(11) 1000 0000 0000 0000,时,最高位1仅代表数值位,“(11)”代表负数。
4. 计算-32768的原码,为了更好地解释此计算过程,此处使用更高的符号位,如下:
a)除符号位,其余取反:(11) 0111 1111 1111 1111
b)加1:(11) 1000 0000 0000 0000
所以,-32768的原码为(11) 1000 0000 0000 0000。
说明:从本文看来,-32768数字情况比较特殊,虽然是一个负数,但是其原码与补码是一样的。
————————————————————————————————————————————————
备注:对于有符号位的16位整型,为何会包含-32768,仍然是不清楚,以后如果有机会弄清楚,需要在此文补充上。
-
c语言中int什么意思以及什么是无符号和有符号整型
2016-10-05 23:55:30int 是无符号的整数类型,直白点说有符号无符号整型就是能不能存放负数。 根据程序编译器的不同,整形定义的字节数不同。51类单片机的C语言中,int代表2个byte(16位);如果是32位ARM处理器的C语言中,则int代表4... -
C语言之整型的各种类型取值范围
2020-11-06 14:43:12C语言中整型各类型占字节数及取值范围: 总结 当某个类型有n个字节的时候,它的取值范围为: 有符号时:-2^(8n-1) 到 2^(8n-1)-1, 为啥值的范围要少一位? 是因为有符号时最高位的0或1代表的是符号位,符号位也需 -
C语言知识汇总 | 13-整数(有、无符号数)的取值范围以及数值溢出
2020-08-24 22:00:47short、int、long 是C语言中常用的三种整数类型,分别称为短整型、整型、长整型。 在现代操作系统中,short、int、long 的长度分别是 2、4、4 或者 8,它们只能...一、无符号数的取值范围 计算无符号数(unsigned 类型 -
C语言中基础数据类型的取值范围——整型溢出问题
2019-06-29 14:02:55C++的基本整型(按宽度递增的顺序排列)分别是 char, short, int, long 和C++11新增的 long long ,每种类型都分 有符号版本 和 无符号版本,因此共有10种类型可供选择。下面更详细地介绍这些整数类型。... -
C语言数据类型取值范围
2019-09-26 09:38:29C语言数据类型取值范围: 在C语言中,每种数据类型都有对应的取值范围,但是在不同的编译软件中,有些数据的...无符号整型unsigned[int] 0~4294967295 短整型 short [int] -32768~32768 无符号短整型unsigned short... -
ARM开发中常见数据类型取值范围
2021-04-08 16:13:42无符号整型 unsigned int 0~4294967295 短整型 short int -32768~32767 无符号短整型 unsigned short int 0~65535 长整型 long int -2147483648~+2147483647 无符号长整型 unsigned long int 0~4294967295 ... -
mysql整形取值范围_mysql中数据类型的取值范围
2021-01-18 19:33:40mysql整型bigint、int、mediumint、smallint 和 tinyint的语法介绍,如下:1、bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到... -
stm32中各种变量的取值范围
2020-12-10 11:24:51无符号整型 unsigned int:0~4,294,967,295 有符号整型 int:-2,147,483,648~2,147,483,647 无符号字符型 unsigned char:0~255 有符号字符型 char:-128~127 无符号短整型 unsigned short (int):0~65535 ... -
opencv图像的深度及取值范围
2017-07-31 18:47:05图像的位深度及其取值范围:src.depth() Mat类型: 矩阵数据类型: —— CV_(S|U|F)C S= 符号整型 U=无符号整形 F... 如:CV_8UC1 表示一个8位无符号整型单通道矩阵 CV_32FC2 表示一个32位浮点型双通道矩阵 -
C基本数据类型的取值范围
2018-10-19 17:18:14无符号整型unsigned[int] :0~4294967295。 短整型 short [int]:-32768~32768。 无符号短整型unsigned short[int]:0~65535。 长整型 Long int: -2147483648~+2147483648。 无符号长整型unsigned [int]:0~42.... -
int和long类型取值范围。 基本数据类型 byte , short , char ,int , long , float ,double,boolean...
2019-08-07 19:35:44int和long类型取值范围。 int和long类型取值范围。 1. int类型 ---------4字节(32位) --------------------------------------------------------...①(无符号整型) ------------------------- unsigned int ... -
arraylist存放不同数据类型_Golang学习之基本数据类型
2020-12-27 17:37:49基本数据类型之整型顾名思义,整型能存放的就是整数值,如0,100,-454等整型细分为两种类型,有符号整型与无符号整型有符号整型取值范围无符号整型取值范围其他整数类型整数类型中,int uint的大小与使用者的电脑... -
C语言整数的取值范围以及数值溢出
2020-11-24 19:26:27C语言整数的取值范围以及数值溢出 short、int、long 是C语言中常用的三种整数类型,分别称为短整型、整型、长整型。 在现代操作系统中,short、int、long 的长度分别是 2、4、4 或者 8,...无符号数的取值范围 计算无 -
int类型在内存中的存储方式、取值范围、溢出
2020-07-22 23:08:55整型存储方式原码:反码:补码取值范围:溢出问题上溢下溢无符号整型unsigned int取值范围: **0~2^32^-1** 即 0~4294967295溢出问题: 存储方式 整型数据都以补码的形式储存在内存中。 使用补码能方便的进行运算,具体的... -
c语言各个数据类型的取值范围
2014-08-28 16:20:50整型 [signed]int -2147483648~+2147483648 无符号整型unsigned[int] 0~4294967295 短整型 short [int] -32768~32768 无符号短整型unsigned sh -
java基本数据类型取值范围_Java中8种基本数据类型及取值范围
2021-03-05 17:26:31整型:byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字节。Byte。末尾加Bshort:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。Short。末尾加S有符号int:-2^31 ~ 2^31-...无符号int:0~2^32-1。long:-2^63 ~ 2^63-1,即-92233... -
无符号整形
2018-07-06 10:00:29简介无符号整型和有符号整型的区别就是无符号类型可以存放的正数范围比有符号整型中的范围大一倍,因为有符号类型将最高位储存符号,而无符号类型全都储存数字。比如16位系统中一个int能存储的数据的范围为-32768~... -
mysql int的取值范围_mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围
2021-01-19 01:57:45【转:原文链接】mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,搜集了些资料,整理分享出来,这篇为有关...9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号... -
数值类型 取值范围
2012-07-22 18:26:0032位CPU 类型 说明符 字节 数值范围 字符型 char 2 基本整型 int 4 ...短整型 ...长整型 ...无符号型 unsigned 单精度实型 float 4 双精度实型 doub... -
32位机器下面各类型的取值范围(sizeof值)
2017-06-01 09:35:2732位机器下面的结果: ...取值范围 bool 布尔型 1 true,false char 字符型 1 -128~127 unsigned char 无符号字符型 1 0~255 short 短整型 2 -32768~32767 unsigned short 无符号短整型 -
char类型的取值范围
2018-12-06 08:56:11在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为...对于无符号整数,很简...