c语言溢出问题

2024-11-20 14:35:12
推荐回答(4个)
回答1:

对于正数,反码,补码与原码相同。
对于负数,补码是原码的符号位不变,数值部分按位取反再加1。

short型数据是16位表示最高位是符号位,所以只有15位表示数值,15位000000000000000-111111111111111表示的范围是0-32767,又加上最高位的符号位(第16位),就可以表示-32768-32767 。unsigned short型数据是16位都用来表示数值,16位0000000000000000-1111111111111111表示的范围是0-65535。
计算机在进行计算时是用补数计算的,且如果溢出会进行丢位处理。如short型32767补码是0111111111111111 加1后为1000000000000000(注意最高位是符号位),1000000000000000正是-32768的补数。
而unsigned short型数据无符号65535为1111111111111111(16位),加1后为10000000000000000(17位)这时计算机判断溢出后丢弃第17位,变为0000000000000000就是0了^_^

回答2:

需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp,输入问题基础代码。

2、在test.cpp文件中,将int全部调整为long long,printf函数调整为:printf("%lld!=%lld\n",n,count);。

3、编译器运行test.cpp文件,此时成功打印出了大数。

回答3:

以c中同一类型运算,结果仍然是这个类型,由于a与1都是int,所以a+1结果仍然是int,此时就发生了溢出,赋值到b中也是溢出后的值。而当一个int与一个long运算时,结果的类型是long,1l后面的l就是long类型的意思,所以a+1l是int与long运算,得到的也是long,然后赋值到b,所以是正确结果

回答4:

如果溢出了默认为下界值