zoukankan      html  css  js  c++  java
  • unsigned char 无符号整形 减法运算

    对于一个字节来说:

    unsigned char :     0  ~  255              0000 0000  ~ 1111 1111

                  char :-128  ~  127              -128  ~  -1     1000 0000  ~ 1111 1111                     0  ~  127     0000 0000  ~   0111 1111

                 (-128 的补码是1000 0000,它没有对应的原码、反码,其推导是根据 -128 + 127 = -1,即1000 0000 + 0111 1111 = 1111 1111)

    计算机CPU只有加法逻辑运算器,对于减法运算,是使用两个数的补码进行加法运算。

     1 #include "stdafx.h"
     2 #include <stdio.h>
     3 
     4 void print_2(unsigned char val2)
     5 {
     6     unsigned char *p = (unsigned char*)&val2; //从低位到高位,低端字节计算机
     7     
     8     for (int i = 7; i >= 0; i--)
     9     {
    10         if(val2 & (1 << i))
    11             printf("1");
    12         else
    13             printf("0");
    14     }
    15     printf(" ");
    16 
    17 }
    18 
    19 int main(int argc, char **argv)
    20 {    
    21     unsigned char a = 1;      //补码:0000 0001
    22     unsigned char b = 2;      //补码:0000 0010
    23     unsigned char c = a - b;  //补码:0000 0001 + (-2)1111 1110 = (-1)1111 1111
    24     
    25     printf("%02x,%02x,%02x
    ", a, b, c);
    26     printf("%d,%d,%d
    ", a, b, c);
    27     print_2(a);
    28     print_2(b);
    29     print_2(c);
    30 
    31     char d = a - b;
    32     printf("
    %d
    ", d);
    33 
    34     getchar();
    35 }

     

    内存中的数据结果是 1111 1111 ,如果按照unsigned char 解释即为255,按照char 解释则为 -1。

    计算机补码概念剖析

  • 相关阅读:
    设计模式-创建型-原型模式
    设计模式-创建型-抽象工厂模式
    设计模式-创建型-工厂模式
    设计模式-创建型-单例模式
    css3技巧属性之text-overflow
    bootstrap如何自定义5等分
    LeetCode-64-最小路径和
    LeetCode-62-不同路径
    LeetCode-5-最长回文子串
    LeetCode-98-验证二叉搜索树
  • 原文地址:https://www.cnblogs.com/kira2will/p/4088662.html
Copyright © 2011-2022 走看看