新函数isprint
#include<ctype.h>
isprint(int i)------->>这个函数的作用是判断整数i(对应ASCii码)是否是可打印字符。如果判断为可打印字符,return一个非0值,如果判断为控制字符则return 0.
#include<stdio.h>
#include<ctype.h>
int main(void)
{
一共有33个控制字符其中ASCii码0~~31共32个,ASCii码127是第32个。
for(int i=0;i<128;i++)
{
int ret;
ret=isprint(i);
if(ret!=0)
{
printf("%d:%c\n",i,i);
}else{
continue;
}
}
return 0;
}
位运算
通过几个位运算的例子,对于计算机里只有0和1的感受更加深刻了
#include<stdio.h>
int main(int argc,char *argv[])
{
int n=3; 二进制 11==3
n=n<<1; 左移一位 110==6
printf("%d\n",n); 输出6
n=n<<1; 再左移一位 1100==12
printf("%d\n",n); 输出12
}
计算机只有0和1,只在于你如何看待它。3的二进制为 (省略30个0)11。通过位运算对计算机里的0,1做手脚使得这个“房间”(地址?)里变成了(省略29个0)110.第二次左移同理,然后通过%d把它当十进制看待,最后依次输出6,12.
源码 反码 补码
先转载一篇很棒的文章https://blog.csdn.net/zhiwen_a/article/details/81192087
写一下我简单的理解,首先最先出现的是源码,但是随着一些计算问题,开始引入反码的概念。但是 反码在负数与负数的计算中任会出现错误,因此最后引入了补码的概念才最终完善了二进制算法。
所有的整型数据都是以补码存储的,但是反码和补码都是为了解决负数的问题而引入的,所以正数的源码,反码,补码都是一样的
(转载于链接文章中)
为了解决反码与源码相反数相加的错误 例如 1110(-1)+0001(1)=1111(-0)这不太好
正数和负数的相反总为111....111,因此引入补码=反码+1,得到100...0000然后溢出的1丢掉得到0
不管它的模是多少,其二进制都是最高位位1其余位补0 ,此图便能形象地展示了补码和源码 。