自学CSday5
  C3kkjyw7DECW 2023年11月02日 17 0

今天介绍一下原码,反码,补码

首先来个例子

#include<stdio.h>

int main()

{

int a = 0; // 4个字节   32 bit

int b =~a; // ‘~’按位取反(b在这里就是有符号的整型)

//   eg    1 0 1 0  → 0 1 0 1  ---- 按位(二进制位)取反

printf("%d\n",b);  //  使用的,打印的是这个数的原码

return 0;

}


负数在内存中存储负的时候,存储的是二进制的补码

二进制中最高位表示的是符号位,有符号的整型是最高位指的是符号位

原码 : 直接按照正负写出的二进制序列


原,反, 补 计算规则

原→反→补

原码符号位不变,其它位按位取反得反,反加1得补码

补→反→原

补码减1得反码,反按位去反得原码

eg:

1 1 1 1 1 1 1 1  补

1 1 1 1 1 1 1 0  反

1 0 0 0 0 0 0 1  原

ps:此处原码中第一个1  代表符号‘-’,最后一个1 就是1   所以就是-1

注意:任何整数数字在内存中存得都是补码(二进制

          正数----原,反,补相同

          负数----原→反→补

反码只是一个计算得中间状态

int main()

{

int a= 10;

int b = a++;/ / 后置++,先使用在++

printf("a=%d, b=%d\n",a,b);

return 0;

}

int b = ++a;     / /前置++,先自增在使用


有符号数

int a = 10; - - -int 定义得变量是有符号数    原signed int

无符号数    ---不存在正负之分, 永远都是正数,即使是负数

unsigned int num = 0;(无符号整型

struct 结构体关键字      union 联合体/公用体    volatile(这个关键字比较复杂

**  自己定义得符号名不能与关键字冲突


typedf  类型定义--类型重定义

typedf unsignede int u_int;

u_int num2 = 20;  与 unsigned int num =0;(无区别 ,变量类型是一样得


static 修饰变量和函数得

#include<stdio.h>

void test()

{

int a = 1;

a++;

printf("a=%d\n",a);}

int main()

{

int i =0;

while(i<5)

{

test()

i++;

return 0;}

}

此时函数出去了之后a就不在了,局部变量生命周期结束了,不会延用到下一次循环


但是如果有static修饰的话,a就被积累下来了并且没有被销毁

static int a= 1; / /a 是一个静态得局部变量

并且a进入范围之后还会存在,且出了范围之后也没有被销毁


static  修饰局部变量,局部变量的生命周期变长

          修饰全局变量,改变了全局变量的作用域,让静态的全局变量只能在自己所在的源文件内部使用,离开源文件就无法使用

——————全局变量只要在其他源文件内部进行外部申明是可以使用的




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

C3kkjyw7DECW
作者其他文章 更多

2023-11-02

2023-11-02

2023-11-02

2023-11-02