(1)基本数据类型及选择循环结构程序段

#include<stdio.h>
int main()
{
// unsigned int i=32769;
// unsigned long l=999;
int i,sum=1;
for(i=1;i<34;i++)
sum*=2;
printf("i=%d,  sum=%d\n",i,sum);
//}
// printf("%d  %ld\n",i,l);
return 0;
}
================================================
//测试计算机内各数据类型所占字节数
//我给你说说吧,和机器有关,现在绝大部分pc都是32位的,所以int是32位,
//而在以前的16位PC上,int是16位的。
//short(int)永远是16位,long(int)永远是32位。 


//注意!!!在本机中测试后结果为(unsigned) int和(unsigned) long和float都为4字节 (unsigned) short都为2字节
//double为8字节 char为1字节
#include<stdio.h>
int main()
{
int i;
short s;//与short int s;效果一样
long l;//与long int l;效果一样
unsigned int ui;  //与unsigned ui效果一样
unsigned short us;//与unsigned short int us;效果一样
unsigned long ul;
float f;
double d;
char c;
printf("int类型所占用的字节数为:%d\n",sizeof(int));
printf("int类型i所占用的字节数为:%d\n\n",sizeof(i));

printf("short类型所占用的字节数为:%d\n",sizeof(short int));
printf("short类型s所占用的字节数为:%d\n\n",sizeof(s));

printf("long类型所占用的字节数为:%d\n",sizeof(long int));
printf("long类型l所占用的字节数为:%d\n\n",sizeof(l));

printf("unsigned int类型所占用的字节数为:%d\n",sizeof(unsigned int));
printf("unsigned int类型ui所占用的字节数为:%d\n\n",sizeof(ui));

printf("unsigned short类型所占用的字节数为:%d\n",sizeof(unsigned short));
printf("unsigned short类型us所占用的字节数为:%d\n\n",sizeof(us));

printf("unsigned long类型所占用的字节数为:%d\n",sizeof(unsigned long));
printf("unsigned long类型ul所占用的字节数为:%d\n\n",sizeof(unsigned long));

printf("float类型所占用的字节数为:%d\n",sizeof(float));
printf("float类型f所占用的字节数为:%d\n\n",sizeof(f));

printf("double类型所占用的字节数为:%d\n",sizeof(double));
printf("double类型d所占用的字节数为:%d\n\n",sizeof(d));

printf("char类型所占用的字节数为:%d\n",sizeof(char));
printf("char类型c所占用的字节数为:%d\n\n",sizeof(c));


return 0;
}




========================================================================
//字长:一般说来,计算机在同一时间内处理的一组二进制数称为一个计算机的“字”,
//而这组二进制数的位数就是“字长”。字长与计算机的功能和用途有很大的关系,
//是计算机的一个重要技术指标。字长直接反映了一台计算机的计算精度
//早期的微机字长一般是8位和16位,386以及更高的处理器大多是32位。
//目前市面上的计算机的处理器大部分已达到64位。 
//想确切地知道计算机字长是32位还是64位,你可以在自己计算机上运行一个C程序:
//结果如果是个乱七八糟的数,那么你的电脑就是32位的,如果是四亿,那么就是64位的
//字长由微处理器对外数据通路的数据总线条数决定


#include<stdio.h>


int main()
{
int a=200000000, b =200000000;
printf("%d\n", a+b);
return 0;


}


================================================================


//用位运算判断数值的奇偶性
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
if(1&x)
printf("x是奇数!\n");
else
printf("x是偶数!\n");
return 0;
}


-----------------------------------------------------


//用位运算判断数值的奇偶性
#include<stdio.h>
#define is_odd(x) (1&(unsigned x))
int main()
{
int x;
scanf("%d",&x);
if(is_odd(x))
printf("x是奇数!\n");
else
printf("x是偶数!\n");
return 0;
}
//程序出错什么原因?




--------------------------------------
//用~0测试计算机字长
#include<stdio.h>
int main()
{
printf("该计算机的字长为%d!",sizeof(~0));
return 0;
}
===============================================================


//测试有符号数赋给无符号数出现什么情况
//测试无符号数赋给有符号数出现什么情况
//测试结果是什么情况也没有安全编译还是原样输出,奇怪!!!
#include<stdio.h>
int main()
{
int i;
unsigned j=-9;    //为什么这个unsigned j=-1;也可以?
// printf("i=%d,  j=%d\n",i,j);

i=j;        //(j=i)当i=-8时是有符号赋给无符号这时j还等于(-8)为什么?不可思议!!!
printf("i=%d,  j=%d\n",i,j);
return 0;
}
====================================================================================
//测试个数据类型的数最大值
//int型数据占4个字节 二进制全1时为1111 1111 1111 1111 1111 1111 1111 1111 ,其十进制为4294967295,其十六进制为FFFF FFFF 。
#include<stdio.h>
int main()
{
int i=4294967295;  //i=4294967295,i输出为-1
printf("int i=%d\n",i);
return 0;
}


-------------------------------------------------------------------------------------
//测试个数据类型的数最大值
//当二进制1111 1111 1111 1111 1111 1111 1111 1111取前一个1为0时就是负数符号改为正号,其十进制数为2147483647
//int型数据占4个字节 二进制全1时为1111 1111 1111 1111 1111 1111 1111 1111 ,其十进制为4294967295,其十六进制为FFFF FFFF 。
//当然int 和 (long int)测试结果一样因为都占4字节(但""注意"" float也占4个字节但测试结果不同,为什么?下面有测试)
#include<stdio.h>
int main()
{
int i=2147483648;  //int i=2147483647,i输出为2147483647 ~~~ 当int i=2147483648时i输出为-2147483648
printf("int i=%d\n",i);  
return 0;
}


--------------------------------------------------------------------------------------------------
//测试个数据类型的数最大值
//short型数据占2个字节 二进制全1时为1111 1111 1111 1111 ,其十进制为65535,其十六进制为FFFF 。
//short型数据占2个字节二进制除最高位为0其他全为1时0111 1111 1111 1111 ,其十进制为32767,其十六进制为7FFF
#include<stdio.h>
int main()
{
short i=65535;  //int i=32767时输出i=32767,int i=32768时输出i=-32768。
printf("int i=%d\n",i); //当 i=65535时输出-1。
return 0;
}


==========================================================
//测试个数据类型的数最大值
//float型数据占4个字节 二进制全1时为1111 1111 1111 1111 1111 1111 1111 1111 ,其十进制为4294967295,其十六进制为FFFF FFFF 。
//当二进制1111 1111 1111 1111 1111 1111 1111 1111取前一个1为0时就是负数符号改为正号,其十进制数为2147483647
#include<stdio.h>
int main()
{
float i=4294967295;  //输出结果为0因为虽然占4个字节但有一部分分配给小数
printf("int i=%d\n",i);  
return 0;
}
===================================================================================================================
//测试个数据类型的数最大值
//double型数据占8个字节二进制全为1时为1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111其
//十进制为18446744073709551615,其十六进制为FFFF FFFF FFFF FFFF
//double型数据占8字节二进制除首位1改为0(符号)为0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111其
//十进制为9223372036854775807,其十六进制为7FFF FFFF FFFF FFFF 
#include<stdio.h>
int main()
{
double i=9223372036854775807;  //double i=9223372036854775807,double i=18446744073709551615时输出0数据太大为什么原因?
                              // 因为其中有些位为小数分配
printf("int i=%d\n",i); //
return 0;
}
=====================================================================================================================
//Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),
//在我的电脑且VC++6.0平台中默认显示是6位有效数字;
//double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字
//测试计算机对float和double数据的精度(即精确到小数后多少位!!!)
#include<stdio.h>
int main()
{
float i=429.1234567890;  //float i=429.1234567890输出为429.123444{精确到小数点后6位}(不管printf是%f格式还是%lf格式)
printf("int i=%lf\n",i);  
return 0;
}
---------------------------------------


#include<stdio.h>
int main()
{
double i=429.1234567890;  //float i=429.1234567890输出为429.123457{精确到小数点后6位但和float的不同}(不管printf是%f格式还是%lf格式)
printf("int i=%lf\n",i);  
return 0;
}


=========================================================================================================================


//测试把小数赋给整数出现什么情况(int i=float j &double k)及把整数赋给小数出现什么情况(float j &double k=int i)


#include<stdio.h>
int main()
{
int i=429.1234567890;  //int i=429.1234567890输出为429(printf是%d格式)但出现警告说可能丢失数据{如果printf是%f格式则输出0.000000}
printf("int i=%d\n",i);  
return 0;
}
------------------------------------------------------------------------------


#include<stdio.h>
int main()
{
double i=429;  //double i=429.1234567890输出为429.000000{精确到小数点后6位}(不管printf是%f格式还是%lf格式)
//float类型一样


printf("int i=%f\n",i);  
return 0;


==========================================================================================================
//123l末尾加了字母l说明是长整型,加lu说明是无符号长整型
#include<stdio.h>
int main()
{
int m=123,n=1234,i=123l,j=1234lu;  //m和i输出结果一样,n和j输出结果一样

printf(" m=%d\n n=%d\n i=%d\n j=%d\n",m,n,i,j);  
return 0;
}


-------------------------------------------------------------------------


//十进制 八进制 十六进制
#include<stdio.h>
int main()
{
int m=123,n=0123,i=0x12f;  //m是十进制(以非零非字母数字开头),n是八进制(以数字0开头),i是十六进制(以数字0和字母x开头)
//当然最后以%d格式 都是转化为十进制输出
printf(" m=%d\n n=%d\n i=%d\n ",m,n,i);  
return 0;
}


----------------------------------------------------------------------


//一个数以十进制 八进制 十六进制输出
#include<stdio.h>
int main()
{
int m=123;  
printf(" 十进制m=%d\n 八进制m=%o\n 十六进制m=%x\n ",m,m,m); 
//最后以%d格式输出十进制,以%o格式输出八进制,以%x格式输出十六进制
return 0;
}


------------------------------------
//程序有误
//好像不能输入八进制数,从计算机输入的数字计算机一律当成十进制数字
//一个数以十进制 八进制 十六进制输入和输出
#include<stdio.h>
int main()
{
int m,n,j;
scanf("%d,%o,%ox",&m,&n,&j);    //分别输入十进制数,八进制数,十六进制数
printf("十进制m=%d\n,八进制n=%o\n,十六进制j=%x\n",m,n,j); 
//最后以%d格式输出十进制,以%o格式输出八进制,以%x格式输出十六进制
printf("十进制m=%d\n,十进制n=%d\n,十进制j=%d\n",m,n,j);
//最后以%d格式十进制输出
return 0;
}




------------------------------------------------------------------------


//由于float的指数部分对应的指数范围为-128~128,所以取值范围为: 
//-2^128到2^128,约等于-3.4E38 — +3.4E38 
//精度(有效数字)主要看尾数位: 
//float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位
#include<stdio.h>
int main()
{
float  m=3.123456789012345678901234567890e35;//不管是用float还是double定义有效位数都为17个为什么?可以用3.4e38试试
printf("m=%lf\n",m);

return 0;
}
========================================================================
//测试putchar getchar scanf printf 四函数的使用方法
#include<stdio.h>
int main()
{
char ch,k;
printf("please input a char:");
ch=getchar();
k=putchar('\n');
printf("\nch=%c,ch=%c\n",ch,k);
return 0;
}


--------------------------------------------------------------------------
//判断是否输入数字字符,是则输出字符Y否则输出字符N
#include<stdio.h>
int main()
{
char ch,yn;

ch=getchar();
yn=(ch>='0'&&ch<='9')?'Y':'N';
putchar(yn);
return 0;
}


=============================================================================
//列出printf函数各种格式输出清单


#include<stdio.h>
int main()
{
char c1='a';
int i1=-1; unsigned short us1=65535;
long l1=-1;
float f1=123.456;

printf("i1=%d,i1=%o,i1=%x,i1=%u\n",i1,i1,i1,i1);//对整型i1按十进制,八进制,十六进制,无符号型输出

printf("l1=%ld,l1=%lo,l1=%lx,l1=%lu\n",l1,l1,l1,l1);//对长整型l1按十进制,八进制,十六进制,无符号型输出

printf("us1=%d,us1=%o,us1=%x,us1=%u\n",us1,us1,us1,us1);//对无符号短整型us1按十进制,八进制,十六进制,无符号型输出

printf("f1=%f,f1=%5.2f,f1=%-9.2f,f1=%e,f1=%g\n",f1,f1,f1,f1,f1);

printf("c1=%c,c1=%3c,c1=%-3c\n",c1,c1,c1);


printf("c1=%d,si1=%c\n",'a',65);


printf("%d%%%d\n",65,3);
return  0;


}




============================================================================
// 测试对\ddd和\xhh,\',\n,\",\\,的输出效果


#include<stdio.h>
int main()
{
int i='\77';
int j='\xf';
printf("i=%d,  j=%d\n",i,j);
return 0;
}






=================================================================================
//测试NULL和0,'0','\0',地址零(即0x00000000)的关系是否等效。
//测试EOF和‘-1’之间的关系是否等效。
//空格的assic码值是多少


#include<stdio.h>
int main()
{
int* p=0;//int*p=NULL;也可以,这里的NULL和0是等效的。
       //一般是不能把整数赋给地址的,这里是特殊情况,0是数字,换成100的话绝对不行.
printf("刚分配的指针所指向的地址为:%x!\n",p);

if('0'=='\0')
printf("字符零和字符反斜杠零是等效的!\n");
else
printf("字符零和字符反斜杠零是不等效的!\n");
if('0'==NULL)
printf("NULL和字符零是等效的!\n");
else
printf("NULL和字符零是不等效的!\n");
if('\0'==NULL)
printf("NULL和字符反斜杠零是等效的!\n");
else 
printf("NULL和字符反斜杠零是不等效的!\n");
if(NULL==0)
printf("NULL和0是等效的!\n");
else
printf("NULL和0是不等效的!\n");
if(EOF==-1)
printf("EOF和-1是等效的!\n");
else
printf("EOF和-1是不等效的!\n");

printf("空格的assic码值为%d\n",' ');
printf("%d\n",'\0');


return 0;


}
=========================================================================================


//测试运算符号 %(模)和/(除) 测试结果%取余,/取倍数。


#include <stdio.h>
int main()
{
printf(" a=%d\n b=%d\n",1%2,1/2);
printf(" a=%d\n b=%d\n",9%2,9/2);

return 0;
}


=======================================================================================


#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
short int n=-1; //有符号整数-1
cout<<(unsigned short int)n<<endl; //以无符号的形式输出为65525
//short int 类型的存储空间为2个字节 应为2的16次方减1
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值