有关C语言 我是初学者
我买的书在强制类型转换这节中有句话“有符号数和无符号数之间的转换在于最高位。有符号数向无符号数转换时,原来的符号位不再作为符号,而变为数据的一部分;无符号数向有符号数转换...
我买的书在强制类型转换这节中有句话“有符号数和无符号数之间的转换在于最高位。有符号数向无符号数转换时,原来的符号位不再作为符号,而变为数据的一部分;无符号数向有符号数转换时,最高位被当作符号位。”这句话是什么意思,我是初学者,麻烦讲详细点
展开
5个回答
展开全部
NaNi_Z 的回答已经大概说明了有符号和无符号的区别。
默认情况下,基本的几个整数类型的最高位被默认为符号位,实际上不管是有符号还是无符号,它在内存中,都只有一种形式,那就是0-FFFFFFFF。
有符号和无符号整数类型的区分,只针对编译器,编译器会根据有符号和无符号来选择如何编译它的运算过程,而最终输出的东西,还是取决于你自己,在标准输出流中,是在ostream中直接有类型的重载,所以cout能直接根据有符号和无符号的正确类型来选择输出。
unsigned int n = 0xFFFFFFFF;
printf("%u, %d\n", n, n);
cout<<n<<endl;
int n2 = -1;
printf("%u, %d\n", n2, n2);
cout<<n2<<endl;
如果要了解有符号和无符号的具体运算过程,你可以写几个加减乘除的代码下个断,看看反汇编。
默认情况下,基本的几个整数类型的最高位被默认为符号位,实际上不管是有符号还是无符号,它在内存中,都只有一种形式,那就是0-FFFFFFFF。
有符号和无符号整数类型的区分,只针对编译器,编译器会根据有符号和无符号来选择如何编译它的运算过程,而最终输出的东西,还是取决于你自己,在标准输出流中,是在ostream中直接有类型的重载,所以cout能直接根据有符号和无符号的正确类型来选择输出。
unsigned int n = 0xFFFFFFFF;
printf("%u, %d\n", n, n);
cout<<n<<endl;
int n2 = -1;
printf("%u, %d\n", n2, n2);
cout<<n2<<endl;
如果要了解有符号和无符号的具体运算过程,你可以写几个加减乘除的代码下个断,看看反汇编。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这本书讲的不好,等下我给你解释一下。其实很简单,就是有符号数可能是负数,如果是负数呢,就需要转符号,需要加个数在计算,无符号本身如果很大就会存在溢出,所以就需要看最高为了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言中有符号整数类型通过最高位来判断他是不是最高位。最高位时1时,代表有符号,最高位时0时,代表无符号。在做强制类型转换时,当然就是书上说的那样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最高位时1时,代表有符号,最高位时0时,代表无符号。
这是这个游戏的规则
这是这个游戏的规则
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询