大小端,printf,%s,%d,%c,%x

unsigned type 和 type的区别

unsigned int 和 int的区别,当我们用int定义一个变量时,实际上是在栈上申请了4B的空间,unsigned只是代表有符号还是没有符号,并不影响空间的大小,所以unsigned int 范围0~2³² = 0~ 0~4294967295,而int的范围是-2的16次~2的16次方 = -2147483648 ~ 2147483647。

至于INT_MAX和INT_MIN的定义

#define INT_MAX 2147483647

#define INT_MIN  (-INT_MAX-1) 

关于宏定义的面试: 复杂的宏定义的时候不要忘记括号;do{...}while(...)的好处;

16位、32位、64位对应的常用数据类型字节数

只用掌握不同的,其它的都一样。

(16位)int 2字节

(32位)int 4 字节

指针类型数据类型字节数:

(32位)char* 4 字节

(64位)char* 8 字节

 

(32位)long   4 字节

(64位)long   8 字节

用数据类型定义变量和用printf读取,用scanf写入

当我们使用int定义一个变量(或者别的数据类型),实际上是告诉编译器给我们申请4B的内存空间,我们要往其中存放数据。

printf、scanf函数中用到的格式符:

%d

%c

%s

%f        浮点数形式

%lf       长浮点数形式(double类型)

%o        八进制

%x        十六进制 

(%X跟%x是输出十六进制数字,%X是输出的十以上的字母大写%x是输出十以上的字母小写)

 

%u       

%e       科学计数法输出

%g       %f或者%e中宽度较短的一种输出

%p       打印地址。打印一个变量或者指针的地址

第一个问题:当printf的变量和格式符不匹配?

有些不匹配可以的,因为发生了隐式转换,比如float类型数据输出int类型时,编译器会提示你警告(数据丢失),还有的就是按照ascii值进行char类型到int,int到char之间的转换。

有的不匹配是不可以的,比如int数据按照%s打印,%s会一直向后寻找一个'\0'字符串结束符,但是一直找不到就发生了内存访问越界,导致程序崩溃。

第二个问题:当scanf的变量和格式符不匹配?

int a;
double b;

//同样输入的数字 a = 1000000000(11位,超过了4B内存的最大数值)
// b = 1000000000(11位)
scanf("%d",&a);
scanf("%lf",&b);

此时的结果,a提示错误,b是可以的。因为根据变量数据类型,在栈上分配了4B和8B的空间,当我们访问越界的时候,编译器会提醒我们发生了错误。

大小端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值