【C语言学习】

1、C语言 “=” 左边代表地址, “=”右边代表的是数值

例如  a = 100 ,左边的 “a” 就是代表 “a” 的地址,也就是数据存放的位置

                          右边的 “100” 代表的是数值,

                         整句话的话就是将 “100” 写入到 a 的地址中保存起来

2、在C语言中常有的数据的长度有如下

char a ;   // 8bits

short c;   //16bits

int c;       //32bits

但是标准的C的赋值规则:

①长字节 >> 短字节

高位的字节直接抛弃,低位的字节保留

②短字节 >> 长字节

低位直接拷贝,高位补上符号位

有符号数,高位全部都补符号位

无符号数,高位全部都补0

练习

(1)分析如下程序的输出结果,假设32bits,
    char c = 250;
    printf("%d\n , c")     ① = ???
    printf("%u\n , c")     ② = 250

    unsigned char c = 250;
    printf("%d\n , c")     ③ = 250
    printf("%u\n , c")     ④ = 250

个人小结:(1)“%d” 是将数值看做无符号的数, “%u” 是将数值看做有符号的数
                  (2)①②中的 char 是 8bits ,最大的时候是256 ,看做有符号的时候是 -127~127

(2)分析如下程序的输出结果,假设32bits

#include <studio.h>

int mian()
{
    printf ("%d\n",-1);//(1) -1
    printf ("%u\n",-1);//(2) 2^32-1
    
    printf ("%d\n",(char)-1);//(3) -1
    printf ("%u\n",(char)-1);//(4) 2^32-1
    
    printf ("%d\n",(unsigner char)-1);//(5) 1
    printf ("%u\n",(unsigner char)-1);//(6) 1 

    printf ("%d\n",255);//(7) -1
    printf ("%u\n",255);//(8) 2^32-1

    printf ("%d\n",(char)255);//(9)  -1
    printf ("%u\n",(char)255);//(10) 255

    printf ("%d\n",(unsigner char)255);//(11) -1
    printf ("%u\n",(unsigner char)255);//(12) 2^32-1
    
}

在计算机C语言里面,存储 “-1” 的 8bits 为 (1111 1111)

原理如下:设(1111 1111)为原码,如果要反推十进制,需要先做一下处理

①先判断:当最高位为0时,表示正数,正数的原码 = 反码 = 补码

                  当最高位为1时,表示负数,负数的原码取反 = 反码,反码加一 = 补码,补码也就是这                   个负数的绝对值。

判断最高位为1,所以为负数,取反为(0000 0000)= 反码,反码加一(0000 0001)= 补码,读出补码可以知道十进制是 1 ,这里的 1 就是这个负数的绝对值。

解题思维(自己存在疑问的点):               

(2)因为 “-1” 在计算机里面存储的 8bits 为 (1111 1111),但是这里作为 32 位的计算机,“-1” 为 “int” 形,所以这里需要进行一个 短字节>>长字节 的过程,在这里事,“-1” 是有符号的数,所以高位全部补上 “1” ,为(11111111 11111111 11111111 11111111),当作为 “%u”  输出的时候(无符号形),所以为 “2^32-1” 。                                                                               

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值