看《c与指针》的疑问我在学习中遇到的问题。
1.在你的机器上字符的范围有多大?
有一种做法是
printf("signed char min =%d\n",-(char)((unsigned char)~0>>1));
printf("signed char max =%d\n", (char)((unsigned char)~0>>1));
但没有明白这样做的意思。
2.在你的机器上,各种不同类型的浮点数的范围是怎样的?
用float.h里定义的宏FLT_MIN,FLT_MAX,DBL_MIN,DBL_MAX,LDBL_MIN,LDBL_MAX行吗?如果不行,用什么方法?
3如果整数类型在正常情况下是有符号的,那么signed 关键字的作用何在?
4.你认为位操作符和移位操作符可以用在什么地方?
5假定一个整数的值是244.为什么机器不会把这个值解释为一个内存地址呢?
是因为编译器没有这样的指令吧。
大家回答一下。谢谢。大家帮帮我啊,解释一下啊。问题积累了,解决不了,心里不爽。虽然本人比较菜,但是俺不放弃。学习去了。回来在看。回复 #1 meiyuhan 的帖子我在学习中遇到的问题。
1.在你的机器上字符的范围有多大?
有一种做法是
[ - ]CODE:
printf("signed char min =%d\n",-(char)((unsigned char)~0>>1));
printf("signed char max =%d\n", (char)((unsigned char)~0>>1));
但没有明白这样做的意思。
=====================================
最高位是符号位,0的反码是全F(0xFF),除去最高位就是最大的字符:(char)((unsigned char)~0>>1));
我觉得最小值不对。应该是还要减1
2.在你的机器上,各种不同类型的浮点数的范围是怎样的?
用float.h里定义的宏FLT_MIN,FLT_MAX,DBL_MIN,DBL_MAX,LDBL_MIN,LDBL_MAX行吗?如果不行,用什么方法?
================================================
移植性问题
3如果整数类型在正常情况下是有符号的,那么signed 关键字的作用何在?
========================
你在强制转换的时候怎么办?
4.你认为位操作符和移位操作符可以用在什么地方?
====================
很多地方, 鑫铭清莲的博客比如操作寄存器的某些位,而不允许改变其他位
5假定一个整数的值是244.为什么机器不会把这个值解释为一个内存地址呢?
==============================
看你怎么用了,如果我愿意,我完全可以把它当作地址*(int *)244
是因为编译器没有这样的指令吧。
大家回答一下。谢谢。楼上的,好人啊。眼泪哇哇的。:em16:1. 获取最小值的方法是错误的。
对于有符号整数(包括字符类型)的负数的实现,通常有两种补码方案:1的补码和2的补码。这两种补码会导致一种有符号整数类型的最小值(是一个负数)不同——最小值之间相差1。一个编译器的实现会从这两种补码方案中选择一种。因此,这不是一个“计算”可以解决的问题。
2. 不知道除了这样还 能有什么通用的方法。
3. int 其实是 signed int,long int 其实是 signed long int,……,但是有唯一的例外:char www.clercjr.com,昱昱炎炎! 祥铭梓亦的博客= signed char,因为 char 是实现相关的:可能是 unsigned char,可能是 signed char。对于 signed char 类型,signed 的存在就是必须的。
4. 对整数(特别是无符号整数)左移或右移 N 位相当于乘以或除以 2 的 N 次幂,所以可以用来进行有限的数值计算。
在实际中,人们经常把一组信息同时放在一个整数中以节省空间。移位和位操作更为常用的是用来设置和提取整数中存放的信息。
5. 在 C 语言中,一个值解释为什么取决于它的类型,而 244 是一个整数类型,不是指针类型,所以这个值不是一个地址值。如果想把它作为一个地址值使用,需要强制转换为指针。很全面,很专业。很透彻。很感谢。
1.在你的机器上字符的范围有多大?
有一种做法是
printf("signed char min =%d\n",-(char)((unsigned char)~0>>1));
printf("signed char max =%d\n", (char)((unsigned char)~0>>1));
但没有明白这样做的意思。
2.在你的机器上,各种不同类型的浮点数的范围是怎样的?
用float.h里定义的宏FLT_MIN,FLT_MAX,DBL_MIN,DBL_MAX,LDBL_MIN,LDBL_MAX行吗?如果不行,用什么方法?
3如果整数类型在正常情况下是有符号的,那么signed 关键字的作用何在?
4.你认为位操作符和移位操作符可以用在什么地方?
5假定一个整数的值是244.为什么机器不会把这个值解释为一个内存地址呢?
是因为编译器没有这样的指令吧。
大家回答一下。谢谢。大家帮帮我啊,解释一下啊。问题积累了,解决不了,心里不爽。虽然本人比较菜,但是俺不放弃。学习去了。回来在看。回复 #1 meiyuhan 的帖子我在学习中遇到的问题。
1.在你的机器上字符的范围有多大?
有一种做法是
[ - ]CODE:
printf("signed char min =%d\n",-(char)((unsigned char)~0>>1));
printf("signed char max =%d\n", (char)((unsigned char)~0>>1));
但没有明白这样做的意思。
=====================================
最高位是符号位,0的反码是全F(0xFF),除去最高位就是最大的字符:(char)((unsigned char)~0>>1));
我觉得最小值不对。应该是还要减1
2.在你的机器上,各种不同类型的浮点数的范围是怎样的?
用float.h里定义的宏FLT_MIN,FLT_MAX,DBL_MIN,DBL_MAX,LDBL_MIN,LDBL_MAX行吗?如果不行,用什么方法?
================================================
移植性问题
3如果整数类型在正常情况下是有符号的,那么signed 关键字的作用何在?
========================
你在强制转换的时候怎么办?
4.你认为位操作符和移位操作符可以用在什么地方?
====================
很多地方, 鑫铭清莲的博客比如操作寄存器的某些位,而不允许改变其他位
5假定一个整数的值是244.为什么机器不会把这个值解释为一个内存地址呢?
==============================
看你怎么用了,如果我愿意,我完全可以把它当作地址*(int *)244
是因为编译器没有这样的指令吧。
大家回答一下。谢谢。楼上的,好人啊。眼泪哇哇的。:em16:1. 获取最小值的方法是错误的。
对于有符号整数(包括字符类型)的负数的实现,通常有两种补码方案:1的补码和2的补码。这两种补码会导致一种有符号整数类型的最小值(是一个负数)不同——最小值之间相差1。一个编译器的实现会从这两种补码方案中选择一种。因此,这不是一个“计算”可以解决的问题。
2. 不知道除了这样还 能有什么通用的方法。
3. int 其实是 signed int,long int 其实是 signed long int,……,但是有唯一的例外:char www.clercjr.com,昱昱炎炎! 祥铭梓亦的博客= signed char,因为 char 是实现相关的:可能是 unsigned char,可能是 signed char。对于 signed char 类型,signed 的存在就是必须的。
4. 对整数(特别是无符号整数)左移或右移 N 位相当于乘以或除以 2 的 N 次幂,所以可以用来进行有限的数值计算。
在实际中,人们经常把一组信息同时放在一个整数中以节省空间。移位和位操作更为常用的是用来设置和提取整数中存放的信息。
5. 在 C 语言中,一个值解释为什么取决于它的类型,而 244 是一个整数类型,不是指针类型,所以这个值不是一个地址值。如果想把它作为一个地址值使用,需要强制转换为指针。很全面,很专业。很透彻。很感谢。