(1)C语言基础,学习笔记(原码 反码 补码 )
2019-10-29 本文已影响0人
王多鱼2
字长
- 是CPU的主要技术指标之一,指的是CPU一次最大能并行处理的二进制位数。
- 现在主流的自算计字长是32位与64位
- 字长的长度是不固定的,对于不同的CPU、字长的长度也不一样.8位的CPU一次只能处理一个字节,而32位的 CPU一次就能处理4个字节,同理字长为64位的CPU一次可以处理8个字节.
原码,反码,补码(二进制)
- 为了表示负数,将最高位解释为符号位
- 正数的原码,反码,补码均相同
- 对于负数,已知原码求反码,符号位不变,其他位按位求反
- 对于负数,已知原码求补码,先求反码,再在反码末位加1
假设我们的计算机字长8位 1字节 = 8bit
10的二进制 原码 0000 1010
反码 0000 1010
补码 0000 1010
-10的二进制 原码 1000 1010
反码 1111 0101
+ 1
补码 1111 0110
在计算机里面 数值 一律用补码来表示(存储)
为什么用补码存: 符号位和其他的位统一处理 减法也可以按照加法来处理
举例 :5 -10 = -5 =》 5+ (-10)
5 补码 0000 0101
-5补码 -》 原码 1000 0101 -》反码 1111 1010 -》补码 1111 1011
0000 0101(5的补码) +1111 0110 (-10的补码)= 1111 1011 (-5的补码)
特殊值
0 原码 0000 0000
反码 0000 0000
补码 0000 0000
8位整数里原码的取值范围为-127到+127 反码也是
但补码是-128到+127,所以 -128的补码应该是10000000
数值
127 原码 0111 1111 反码 0111 1111 补码0111 1111
-127 原码 1111 1111 反码 1000 0000 补码1000 0001
-128 无 无 1000 0000
4. char c = 128; 以下都是拿的以为上海兄弟的笔记;
printf("%d\n",c);
printf("%hhd\n",c);
printf("%hd\n",c);
printf("%hu\n",c);
输出结果,解释为什么是这样的?
- 4.1 格式输出符
格式符号 意义
%a 浮点数、十六进制数字和p-记数法 (C99)
%A 浮点数、十六进制数字和P-记数法 (C99)
%c 一个字符
%d 有符号十进制整数
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 浮点数,十进制记数法
%g 根据数值不同自动选择%f或者%e。%e格式在指数小于-4或者大于等于精度时使用
%G 根据数值不同自动选择%f或者%E。%E格式在指数小于-4或者大于等于精度时使用
%i 有符号十进制整数 (与%d相同)
%o 无符号八进制整数
%p 指针(就是指地址)
%s 字符串
%u 无符号十进制整数
%x 使用十六进制数字0f 的无符号十六进制整数
%X 使用十六进制数字0F的无符号十六进制整数
%% 打印一个百分号