有符号变量与无符号变量之间的值的转换

1、有符号变量与无符号变量之间的值的转换

程序例子
涉及到的内容是:
有符号变量和无符号变量之间的转换
溢出(如何判断)

#include<stdio.h>
char getchar(int x, int y){
    char c;
    unsigned int a = x;
    (x + y > 10 ) ? (c = 1): (c = 2);
    return c;
}
int main(){
    char ch1 = getchar(7,4);//x+y = 11 > 10, c=1
    char ch2 = getchar(7,3);//x+y = 10 = 10, c=2
    char ch3 = getchar(7,-7);// x+y = 0 < 10, c=2
    char ch4 = getchar(7,-8);// x+y = -1 < 10, c= 2
    print("ch1: ", c1, "\nch2: ", ch2, "\nch3: ", ch3, "\nch4: ", ch4);
}




>>ch1:1
  ch2:2
  ch3:2
  ch4:1 // 与预想的结果不一致
2、有符号变量和无符号变量的区别:

以8位二进制的char为例解释:
1、如果是有符号变量的话则8个数字表示的是-128~127,共计256个数字
2、如果是无符号变量的话则表示0~255,共计256个数字。
3、有符号数字的左边第一个位置表示符号位(0表示正数,1表示负数),无符号变量的左边第一个数字表示2^7 = 128
4、有符号变量中的负数用补码表示,正数与无符号变量一致(这个表示在一个表达式中同时存在有符号变量和无符号变量时需要都转换成无符号变量进行计算,有符号的变量需要从原码转换成补码进行计算)
5、无符号变量用原码表示
6、原码就是如下表格
7、反码在此基础上将符号位除外的其他为反值
8,补码为反码加1

在这里插入图片描述

3、对1中的代码11,12行的输出解释

所以上面的11行,12行代码的计算为:

11行

-7:原:1000 0111
反:1111 1000
补:1111 1001
————————
7: 原:0000 0111
————————
= 10000 0000 (有溢出,实际的值为0)

12行

-8:原:1000 1000
反:1111 0111
补:1111 1000
————————
7: 原:0000 0111
————————
= 1111 1111(恰好没有溢出,实际的值为255)
255 > 10 所以
c = 1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值