黑马程序员技术交流社区
标题:
还是数据类型问题...
[打印本页]
作者:
付旭
时间:
2011-12-14 11:45
标题:
还是数据类型问题...
本帖最后由 付旭 于 2011-12-14 14:35 编辑
数据类型的那个取值范围 就比如-128~127 这个是什么意思呢? 是真实的阿拉伯数字的范围呢 还是其它的呢? 不是很了解
作者:
吴上储
时间:
2011-12-14 11:51
本帖最后由 吴上储 于 2011-12-14 12:57 编辑
byte 取值范围是 -128~127 就是-128 -127 -126 ... 125 126 127 而且是整数类型的 了解?以此类推!
作者:
唐秀启
时间:
2011-12-14 11:53
本帖最后由 benbenqi 于 2011-12-14 11:59 编辑
Byte 表示的范围是-128~127
什么叫做真实的阿拉伯数字范围??
作者:
余松霖
时间:
2011-12-14 12:09
你是想说这个范围里边的数字是确确实实的数字范围还是有什么其它意思是吧!
这范围就是确确实实的数字范围!
byte -128~127 超过这个范围就是 short ~-32768~32767 或者 int -2147483648 到 2147483647
或者最大的 long -9223372036854775808 到 9223372036854775807
作者:
付旭
时间:
2011-12-14 12:27
了解了 谢谢四楼....
作者:
刘基军
时间:
2011-12-14 12:36
1.byte,一个字节,二进制表示8位,那么表示范围就是:0000 0000-1111 1111
2.在计算机中,数据以二进制(实际是二进制的补码)进行存储,那么负数如何表示呢?
-将数据的二进制表示的最高位,定为符号位(0-正,1-负),
3.则byte可以表示的最大的正数就是0111 1111,即+127。而为什么最小的数是-128,而不是-127呢?
-对于正数来讲,二进制的原码,反码,补码都是相同的
+127, 0111 1111
+126, 0111 1110
+125, 0111 1101
+124, 0111 1100
+123, 0111 1011
+122, 0111 1010
...
+4, 0000 0100
+3, 0000 0011
+2, 0000 0010
+1, 0000 0001
0, 0000 0000 (无正负之分)
而对于负数,原码,(除了符号位)将原码取反即是反码,再将反码加1就是补码
-1, 1000 0001, 1111 1110, 1111 1111
-2, 1000 0010, 1111 1101, 1111 1110
-3, 1000 0011, 1111 1100, 1111 1101
-4, 1000 0100, 1111 1011, 1111 1100
-5, 1000 0101, 1111 1010, 1111 1011
-6, 1000 0110, 1111 1001, 1111 1010
-7, 1000 0111, 1111 1000, 1111 1001
-8, 1000 1000, 1111 0111, 1111 1000
-9, 1000 1001, 1111 0110, 1111 0111
-10, 1000 1010, 1111 0101, 1111 0110
-11, 1000 1011, 1111 0100, 1111 0101
-12, 1000 1100, 1111 0011, 1111 0100
-13, 1000 1101, 1111 0010, 1111 0011
-14, 1000 1110, 1111 0001, 1111 0010
-15, 1000 1111, 1111 0000, 1111 0001
-16, 1001 0000, 1110 1111, 1111 0000
-17, 1001 0001, 1110 1110, 1110 1111
...
-24, 1001 1000, 1110 0111, 1110 1000
...
-99, 1110 0011, 1001 1100, 1110 0100
...
-124, 1111 1100, 1000 0011, 1111 1101
-125, 1111 1101, 1000 0010, 1000 0011
-126, 1111 1110, 1000 0001, 1000 0010
-127, 1111 1111, 1000 0000, 1000 0001
(注意规律)如果再继续下去,下一个补码是什么呢?
那就是:
-128, ..................................1000 0000, 对于1000 0000的原码是什么?(从补码求原码的方法跟原码求补码是一样的)先
取反后1111 1111,再加1后11000 0000, 超过了8位了
对,用8位数的原码在这里已经无法表示了
关键就在这里,补码 1000 0000 为 -128 是不用怀疑的(上面的穷举),
那么,回到原码处, 它的原码也是 1000 0000(超出的自动丢失),
1000 0000 在原码表示什么呢? -0, 但补码却规定0没有正负之分
转换一下思路,看看计算机里,是怎么运算的:
对于负数,先取绝对值,然后求反,加一
-128 -> 128 -> 1000 0000 -> 0111 1111 -> 1000 0000 (-128)
现在明确了吧
所以, 8位有符号的整数取值范围的补码表示
1000 0000 到 0000 0000, 再到 0111 1111
即 -128 到 0, 再到 127
最终 -128 ~ +127
作者:
应国炎
时间:
2011-12-14 12:47
你所说的阿拉伯数字就是计算机里的十进制吧? -128~127 代表的就是十进制
至于范围问题,牵涉的就是计算机里的二进制表示范围了, 比如8位的二进制的表示范围用十进制表示就是-128~127 , 位数越大表示的范围也越大
为什么要用二进制表示,是因为计算机是以电平的高低来识别信息的,比如高为1低为0. 识别出来的010101等信息再转换成你需要的数据了,进一步的信息需要看计算机组成技术和模电数电技术.
作者:
马伟奇
时间:
2011-12-14 12:49
这个是char 的范围是 -128 ~ 127
所谓的“字符”类型,似乎除了取值范围小一点以外,和整型也没有什么区别。这句话的确没错。对于C、C++来说,字符类型完全可以当成一个整数来对待。
事实上,所有信息在计算机里,都是使用数字来表达。英文字母 'A' 在计算机里表示为 65; 字母 'B' 表示为66。所有你在键盘可以看到的字符,如大小写英文字母,阿拉伯数字符号,标点符号都可以有一个相应的数值表示。
但要让我们记住65就是'A',计算机高级语言允许我们直接为字符类型变量这样赋值:
char c = 'A'; 即:将所要得到的字符用单引号括住。(引号''是英文状态下的,千万不要使用中文符号)
作者:
付旭
时间:
2011-12-15 15:10
兄弟 byte才是-128~127吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2