主题:求助啊,赋值运算中的类型转换问题!
541283622
[专家分:0] 发布于 2010-09-21 21:47:00
程序如下
#include<stdio.h>
void main()
{
unsigned i;
int j=-1;
i=j;
printf("%u",i);
}
运行后输出的是十进制数65535
若j为正值,且在0~32767之间,则赋值后数值不变,运行结果就是j本身的值。
我晕,我实在是看不懂了,这是我的教材上的原文。。。
是《整型数间的转换》的例题
各位帮帮吧,谢谢咯!
回复列表 (共5个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2010-09-22 15:47:00
找找關鍵字:
補碼
板凳
dlfhcg [专家分:30] 发布于 2010-09-24 02:17:00
j=-1 j是整型的,在内存中占2个字节及16位。在计算机中以二进制的补码存放。一个正整数的补码和该数的的原码(及该数的二进制形式)相同。求负数的补码的方法是:将该数的绝对值的二进制形式,按值取反再加1。例如j=-1,取绝对值1,1的绝对值二进制形式为0000000000000001,取反1111111111111110,再加1则为1111111111111111(及j=-1在内存中实际存储的情况)。而定义的i是无符号的整型变量,j赋给i,i就是1111111111111111,转化为十进制即为65535。
“若j为正值,且在0~32767之间,则赋值后数值不变,运行结果就是j本身的值。”j默认是signed,16位补码中第一位为符号位,1表负号,0表正号。所以取值范围为-32768~32767之间(即后15位二进制数转化为十进制的范围)。
3 楼
541283622 [专家分:0] 发布于 2010-09-26 21:11:00
谢谢谢谢谢谢~~~呵呵,明白了
在学校,不是天天都上得了网,回复慢了些~抱歉啊~
4 楼
拐角的认识 [专家分:0] 发布于 2010-10-02 21:44:00
[quote]j=-1 j是整型的,在内存中占2个字节及16位。在计算机中以二进制的补码存放。一个正整数的补码和该数的的原码(及该数的二进制形式)相同。求负数的补码的方法是:将该数的绝对值的二进制形式,按值取反再加1。例如j=-1,取绝对值1,1的绝对值二进制形式为0000000000000001,取反1111111111111110,再加1则为1111111111111111(及j=-1在内存中实际存储的情况)。而定义的i是无符号的整型变量,j赋给i,i就是1111111111111111,转化为十进制即为65535。
“若j为正值,且在0~32767之间,则赋值后数值不变,运行结果就是j本身的值。”j默认是signed,16位补码中第一位为符号位,1表负号,0表正号。所以取值范围为-32768~32767之间(即后15位二进制数转化为十进制的范围)。[/quote]
好标准!
5 楼
bianchengwoai [专家分:10] 发布于 2010-10-07 16:35:00
这样的分析我也懂,但实在是不能写的像该楼这样清楚和细致,顶。。。。
我来回复