1楼:
c/c++中所有的整数都用二进制补码表示。
char型的正数范围是1~127而不是0~255;unsigned char型的范围才是0~255。
char型的范围是-128~+127。
因为整数域客观上存在负数、0和正数,所以c/c++的整数数据类型必须“适应”这种客观需要;unsigned数据只是在实际问题不涉及负数时定义的所谓“无符号数”,用以扩展有限的二进制位长表达更多的整数。
2楼:秋叶丝语
每种类型都分为: 有符号和无符号两种
比如你所说的char类型,也分为:unsigned char 和signed char
char在大多数的编译器中是认为是signed char。
unsigned char的取之范围是:0-255 (8为都是数据)signed char的取之范围是:-128 - 127 (最高位是符号位,剩下7位是数据)。
无论是有符号数还是无符号数在内存中都是以补吗的方式存储的。
3楼:匿名用户
知道这个范围就行,实际中用不用,要看实际的情况~~~
c/c++中char型数据为什么unsigned char也可以取负值,而char类型取值-157也可以??
4楼:
你的“感觉copy”不错。对char型而言,赋一个bai
略大于127和小于0的数都du是负数zhi,如dao
果小于-128就反而成正数了,比如char a=-157;printf("%d\n",a);输出是99。实际上是这样的:无论数据有多大多小,总是把这个数的二进制最低字节赋给char变量,那么这个最低字节的最高位就决定了这个数的正负!
仍以上例,-157的二进制补码是101100011,最低8位是01100011,它的最高位是0,就被解释为正数99了。但这不应该认为是正常显示,本是一个负数都显示为正数了怎么还算正常?不仅是char变量,int也一样,超出能表示的范围后就如以上那样“乱套”了。
所以编程时要注意控制数据类型的范围,不然就得不出正确的结果。
c语言基本整型的数据范围什么意思
5楼:匿名用户
基本整型变量,所占字节数为2,每个字节等于八位二进制数,可以用0和1表示的八位二进制数,2个字节也就是16位二进制。
最高位表示正负,所以用0和1组成的16位数字范围为-2的15次方~2的15次方,也就是-32768~32767。因此基本整型变量数据范围是-32768~32767。
6楼:匿名用户
int占4个字节,一个字节4位,则它的空间有2的16次方byte,若有unsigned修饰,则说明它是无符号整型数据,它的范围为0~65535,若没有unsigned修饰,则说明最高位为符号位,它的范围为-32768~32767
对于无符号数,比较简单,根据占用的位数可以直接计算:
unsigned short 16位 0~2的16次方-1(即65535)
unsigned int 16位 0~2的16次方-1(即65535)
unsigned long 32位 0~2的32次方-1(即4294967295)
对于有符号数,由于符号位占用一位,并且负数要用补码表示。
以8位数据为例:2进制的11111111表示-1,10000000表示-128,所以负数范围-128~-1;2进制00000000表示0,01111111表示127,所以正数范围0~127。合起来就是-128~127,找一下规律发现是- 2的(8-1)次方~2的(8-1)次方-1,那么就可以得到任何位数的范围:
short 16位 - 2的(16-1)次方~2的(16-1)次方-1(即-32768~32767)
int 16位 - 2的(16-1)次方~2的(16-1)次方-1(即-32768~32767)
long 32位 - 2的(32-1)次方~2的(32-1)次方-1(即-2147483648~2147483648)
扩展资料:
(1)char:字符型数据,属于整型数据的一种,占用一个字节
(2)unsigned char:无符号字符型数据,属于整型数据的一种,占用一个字节
(3)short:短整型数据,属于整型数据的一种,占用两个字节
(4)unsigned short:无符号短整型数据,属于整形数据的一种,占用两个字节
(5)int:整形数据,属于整型数据的一种,占用四个字节
(6)unsigned int:无符号整型数据,属于整型数据的一种,占用四个字节
(7)long:长整型数据,属于整型数据的一种,占用四个字节
(8)unsigned long:无符号长整型数据,属于整形数据的一种,占用四个字节
实 型 变 量 的 类 型 有 float和 double两 种 ,下 表 列 出 这 两 种 类型所 占 内 存 的 位数 和 其 表 示 范 围 。数据类型 所占位数 数的范围:
float 32 3.4e-038~3.4e+038
double 64 1.7e-308~1.7e+308
双 精 度 类 型 double比 单 精 度 类 型 float具 有 更 高 的 精 度 和更大 的 表 示 范 围 ,常 常 使 用 。
7楼:蔷祀
整型变量int占4个字节,一个字节4位,则它的空间有2的16次方byte,若有unsigned修饰,则说明它是无符号整型数据,它的范围为0~65535。若没有unsigned修饰,则说明最高位为符号位,它的范围为-32768~32767。
int是数据库中一种数据类型,同时,作为函数,int函数指数据库中常用函数中的“向下取整函数”。常用来取一个数中的整数部分。int是将一个数值向下取整为最接近的整数的函数。
为取整函数。
扩展资料:
c语言中其他数据的取值范围:
①短整型:
类型说明符为short int或short'c110f1。所占字节和取值范围会因不同的编译系统而有差异。对于16字机,short int 占2个字节,在大多数的32位机中,short int 占4个字节。
但总的来说,short int 至少16位,也就是2个字节。
②长整型:
类型说明符为long int或long ,在内存中占4个字节,其取值为长整常数。在任何的编译系统中,长整型都是占4个字节。在一般情况下,其所占的字节数和取值范围与基本型相同。
③无符号型:
类型说明符为unsigned。在编译系统中,系统会区分有符号数和无符号数,区分的根据是如何解释字节中的最高位,如果最高位被解释为数据位,则整型数据则表示为无符号数。
8楼:匿名用户
1 字节 = 8位
int型 2字节 = 16位
按vc++和c++的规定,int和long等长,都是32位的。short才是16位的。只有原始的c才定义int和short等长为16位。
这个数据范围指的确实是具体 int的取值范围,但不是你理解的那样。
现在以16位的short为例。
首先必须清楚一个概念,计算机中存放的数据都是以二进制形式存放的。short存放的是整型数据,是用固定位数16个二进制位来表示一个整数,不足16位补0。
比如125的二进制是1111101,那么在内存中存放就是
0000 0000 0111 1101
那么16个二进制位能够表示多少种不同的整数呢?稍微用点数学常识就知道,是2的16次方,也就是65536个不同的整数。所以对于无符号整数,unsigned short的范围就是0~65535。
而为了表示负数,计算机用short的第一位作为符号位来表示正负。注意,计算机中是以补码的形式存放整数的。对于正数,补码是其本身;对于负数,其补码是对其绝对值的按位取反,再加1的结果。
举个简单的例子:
125是0000 0000 0111 1101
-125计算过程:
125是0000 0000 0111 1101
按位取反,1111 1111 1000 0010
再加1,1111 1111 1000 0011
所以-125就是1111 1111 1000 0011。
补码不是三言两语能讲得清楚的,楼主有个概念即可。
我们发现,正数的补码首位都是0,负数的补码首位都是1。
short有符号型的范围是-32768~32767。
那么,如果超出了范围,会发生什么现象呢?
很简单,这称为溢出。
比如short a = 32768
32768是1000 0000 0000 0000。还记得我讲过吗?正数的补码首位都是0,但这里首位为1,这是怎么回事呢?
其实因为浪费了1位做符号位,short的有效位数只是15位而已,而2的15次方是32768,因此正数的范围是0~32767,32768超出了范围,计算机怎么处理呢?结果就是把它当作负数,根据补码计算它的原码。反过来即可
1000 0000 0000 0000 减1,
0111 1111 1111 1111 再按位取反,
1000 0000 0000 0000 就是32768
所以1000 0000 0000 0000表示-32768
也就是说short a = 32768;把a输出来得到-32768楼主可以试验一下。
再举一例:
unsigned short a=65536;
65536是1 0000 0000 0000 0000 注意这已经是17位了。计算机会自动截取后面的16位
就是得到0000 0000 0000 0000,也就是0
所以unsigned short a=65536;输出a得到0。
明白了吗?
9楼:听不清啊
对于无符号数,根据占用的位数可以直接计算:
unsigned short 16位 0~2的16次方-1(即65535)
unsigned int 16位 0~2的16次方-1(即65535)
unsigned long 32位 0~2的32次方-1(即4294967295)
对于有符号数,由于0也占用一个位置,导致负数的边界值与正数的边界值不一样:
short 16位 - 2的(16-1)次方~2的(16-1)次方-1(即-32768~32767)
int 16位 - 2的(16-1)次方~2的(16-1)次方-1(即-32768~32767)
long 32位 - 2的(32-1)次方~2的(32-1)次方-1(即-2147483648~2147483647)
水泥地面怎么干,可以即省力又快还干净
1楼 月夜下丶温情 不建议用扫的,因为成效不大,去请一辆那种清理马路灰尘垃圾的车吧,如果找不到那只有用管子啦 2楼 感性的小安安 水泥地只有水冲最干净,没错,可以多让几个人帮忙清洁一下 3楼 匿名用户 镜子反射太阳光,外加电风扇 4楼 匿名用户 你要是有心的话,拿个风筒在哪儿吹 怎么样墩地又快又干净...
C++中函数的数据类型表达了什么意思
1楼 匿名用户 void是错误的,我可以明确告诉你,别学那样写。正确 的形式是int。我记得以前看一本书上这样说过。 其他的函数返回值就是你自己把握了,你想让其返回什么就是什么了。不想让此函数返回值就void了 2楼 吾守护奇迹 你所写的main函数实际上并不是真正的程序入口点函数 它会由c 运行时...
c++中double类型的0乘以负数输出为-0,为什么?详情
1楼 匿名用户 好吧,这道题太让我好奇了,一看没人回答,我自己试了一下。 一样的程序,我用vc6 0输出0。。。我就不截图了。 看来和编译器有关。。。 2楼 匿名用户 我不能肯定,但是我认为这取决于编译器的实现,他估计是看见乘法就直接就进行符号位乘法,即正正为正 负负为正 正负为负,以此修改结果的符...