c语言笔记

本文介绍了C语言中循环输入的表示,通过~运算符判断EOF来结束循环,以及数值交换的位运算技巧。还详细讲解了16位二进制有符号整型的最大值及其表示范围,并解释了补码、反码的概念。内容涵盖C语言基础和计算机数值表示。
摘要由CSDN通过智能技术生成

1. 循环输入的二种表示

在这里插入图片描述

  1. ~是按位取反

scanf的返回值是输入值的个数,如果没有输入值就是返回-1,-1按位取反结果是0

while(~scanf("%d", &n))就是当没有输入的时候退出循环

  1. EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。

EOF 的值通常为 -1

2. 两个值交换的第二种思路

a^=b;
b^=a;
a^=b;

解释:

a'=a^b;
b=b^a'=b^a^b=a;
a=a'^a=a^b^a=a;

3. int最大值

补码=反码(原码符号位不变 再取反) +1

16位的int取值范围分为无符号整型(unsigned int)和有符号整型(signed int)。

无符号整型是0000 0000 0000 0000 ~ 1111 1111 1111 1111,对应的十进制数为0到65535(即2^16-1)。

要理解有符号整型首先要了解两个规定:

符号位:对于有符号整型,存储单元中最高位代表符号位:0为正,1为负。

有符号整型的负数表示方法:补码(原码先取反再加1得到补码)。


举例:表示16位的-1。

1的原码:0000 0000 0000 0001;

取反(01互换):1111 1111 1111 1110;

加1:1111 1111 1111 1111。

得到-1的补码为1111 1111 1111 1111。

所以16位二进制有符号整型的-1就表示为1111 1111 1111 1111。


所以16位二进制数有符号整型的表示范围为:

正数,最高位为0,取值范围如下:

0000 0000 0000 0001 到 0111 1111 1111 1111

对应的十进制数为1到32767(2^15-1)。

0,全部位为0:

0000 0000 0000 0000。

负数,最高位为1,取值范围如下(以补码形式表示):

1111 1111 1111 1111 到 1000 0000 0000 0000

对应的十进制数为-32768到-1,即-2^15到-1。

综上,16位二进制数有符号整型的取值范围是-32768到32767。

加深理解:题主问题中问-32768(-2^15)怎么来的,1000 0000 0000 0000在无符号整型中表示2^15怎么在有符号整型中就表示-2^15了呢?这里可以通过补码减1取反倒推出原码。

补码:1000 0000 0000 0000

减1:0111 1111 1111 1111

取反得到原码:1000 0000 0000 0000(2^15)

原码补码相同,只是个巧合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值