C 中int型向無符號型別的轉換

2021-08-15 21:10:10 字數 967 閱讀 9492

在日常生活中,我們知道,加上乙個負數,等於減去這個負數的絕對值。

那麼在c++裡,是否和我們平時的認知是一樣的呢?

看一段小**:

int i=-42;

unsigned j=10;

std::cout這個**的輸出結果是什麼呢?

和平時的答案不太一樣吧。下面就來**一下原因。

因為在機器中,所有的data都是由二進位制數來儲存,所以此時先將-42轉換為二進位制數。

這時要注意,int型在機器裡是32位儲存,所以此時,在101010前面還有25個0,然後第一位是乙個1,代表是負數。

所以,此時的-42完全轉換為int的二進位制形式是:10000000000000000000000000101010.

然後再取反碼:除符號位外,其餘位取反,即為:11111111111111111111111111010101.

再取補碼:在反碼的基礎上+1,即為:                11111111111111111111111111010110.

好了,處理完int型,現在處理unsigned型。

已知unsigned型為10,則轉化為二進位制是:

同理,此時前面均為0,所以其二進位制就是1010.

現在兩個數都處理完了,接下來進行加和。

11111111111111111111111111010110 + 1010

根據二進位制逢二進一,可以得出結果為:   11111111111111111111111111100000

化成十進位制,既得到結果。

由此可知:

1.機器中儲存負數是儲存其補碼,要掌握補碼計算過程;

2.int型數化unsigned型數的方法過程;

3.計算機中的基本編譯儲存原理。

c語言int型和char型的自動型別轉換

char a 1 機器碼為0xff unsigned char b 254 機器碼0xfe if a b else 上述 輸出結果 a b 賦值用機器碼寫入記憶體 雖然我們以十進位制為兩個變數賦值,但是變數值在記憶體中是以二進位制機器碼的形式存在。如果十進位制數是負數,它就以補碼的形式存放在記憶體中...

有符號型別與無符號型別之間的轉換

void foo void unsigned int a 6 int b 20 a b 6 puts 6 puts 6 printf b x n b b 0xffffffec 這個問題測試你是否懂得c語言中的整數自動轉換原則 這無符號整型問題的答案是輸出是 6 原因是當表示式中存在有符號型別和無符號...

C 中int型與string型互相轉換

include 使用c 標準庫的string類時 using namespace std 同上 include include include 要將string類和int型別直接轉換最好有這些包含,因為自己寫乙個轉換函式比較方便,函式定義參考如下 string getstring const int...