[MUSIC CHƠI] SPEAKER: Tất cả các quyền. Vì vậy, chúng ta hãy nói về một việc khác điều đó là loại duy nhất cho C, đó là các kiểu dữ liệu và các biến. Khi tôi nói độc đáo để C, tôi thực sự chỉ có ý nghĩa trong bối cảnh, nếu bạn đã là một lập trình viên trong một thời gian rất dài, bạn đã có thể không làm việc với các kiểu dữ liệu nếu bạn đã sử dụng hiện đại ngôn ngữ lập trình. Ngôn ngữ hiện đại như PHP và JavaScript, mà chúng ta cũng sẽ thấy một chút sau này trong khóa học, bạn không thực sự có chỉ định kiểu dữ liệu của một biến khi bạn sử dụng nó. Bạn chỉ cần khai báo nó và bắt đầu sử dụng nó. Nếu đó là một số nguyên, nó biết nó là một số nguyên. Nếu đó là một nhân vật, đó là biết đó là một nhân vật. Nếu đó là một từ, nó biết đó là một chuỗi, cái gọi là. Nhưng trong C, mà là một ngôn ngữ cũ, chúng ta cần để xác định dữ liệu loại của mỗi biến mà chúng ta tạo ra lần đầu tiên mà chúng ta sử dụng biến. Vì vậy, C kèm với một số được xây dựng trong các kiểu dữ liệu. Và chúng ta hãy làm quen với một số người. Và rồi sau đó chúng tôi cũng sẽ nói một chút chút về một số các kiểu dữ liệu mà chúng tôi đã viết cho bạn, vì vậy bạn có thể sử dụng chúng trong CS50. Đầu tiên là int. Các kiểu int dữ liệu được sử dụng cho các biến sẽ lưu trữ các giá trị số nguyên. Vì vậy, 1, 2, 3, tiêu cực 1, 2, 3, và như vậy. Số nguyên, mà là một cái gì đó bạn nên ghi nhớ cho các bài kiểm tra, luôn chiếm bốn byte bộ nhớ, mà là 32 bit. Có tám bit trong một byte. Vì vậy, điều này có nghĩa là phạm vi giá trị mà một số nguyên có thể lưu trữ được giới hạn bởi những gì có thể phù hợp trong 32 bit giá trị của thông tin. Bây giờ khi nó quay ra, nó đã được quyết định từ lâu rằng chúng ta sẽ chia tay có khoảng từ 32 bit thành các số nguyên âm và số nguyên dương, mỗi nửa nhận trong phạm vi. Vì vậy, phạm vi của các giá trị mà chúng tôi đại diện với một dãy số nguyên từ âm 2 với sức mạnh 31 đến 2 quyền lực thứ 31 trừ đi 1, gây ra bạn cũng cần một chỗ cho 0. Vì vậy, về cơ bản một nửa của giá trị có thể bạn có thể phù hợp trong một int là tiêu cực, và một nửa là tích cực. Và gần đây, đây là về tiêu cực 2 tỷ để về dương 2 tỷ. Cho hay phải mất một vài trăm triệu đồng. Vì vậy, đó là những gì bạn có thể phù hợp trong một biến số nguyên. Bây giờ chúng tôi cũng có một cái gì đó được gọi là một số nguyên không dấu. Bây giờ ints chưa ký thì không phải là một loại riêng biệt của biến. Thay vào đó, unsigned là những gì được gọi là một vòng loại. Ứng dụng chỉnh sửa dữ liệu loại nguyên hơi. Và trong trường hợp này, những gì unsigned means-- và bạn cũng có thể sử dụng unsigned loại dữ liệu khác, số nguyên không phải là người duy nhất. Tăng gấp đôi những gì nó có hiệu quả không là phạm vi tích cực của các giá trị rằng một số nguyên có thể mất trên tại các chi phí của không còn cho phép bạn để đưa vào giá trị âm. Vì vậy, nếu bạn có con số mà bạn biết sẽ nhận được cao hơn 2 tỷ đồng nhưng ít hơn 4 tỷ đồng, cho example-- đó là 2 đến thứ 32 power-- bạn có thể muốn sử dụng một int unsigned nếu bạn biết giá trị của bạn sẽ không bao giờ được tiêu cực. Đôi khi bạn sẽ có được sử dụng cho các biến unsigned trong CS50, đó là lý do tại sao tôi đề cập đến nó ở đây. Nhưng một lần nữa, phạm vi của các giá trị mà bạn có thể biểu diễn với một số nguyên không dấu như t số nguyên thường xuyên, là 0 để 2 đến sức mạnh thứ 32 trừ đi 1, hoặc khoảng 0-4000000000. Vì vậy, bạn đã có hiệu quả tăng gấp đôi phạm vi tích cực mà bạn có thể phù hợp, nhưng bạn đã từ bỏ tất cả các giá trị âm. Bây giờ là một sang một bên, unsigned không phải là vòng loại chỉ rằng chúng ta có thể xem cho kiểu dữ liệu biến. Cũng có những thứ gọi là ngắn hạn và dài và const. Const chúng ta sẽ thấy một chút bit sau này trong khóa học. Ngắn hạn và dài, có lẽ chúng ta sẽ không. Nhưng chỉ biết rằng có là vòng loại khác. Unsigned không phải là người duy nhất. Nhưng nó là người duy nhất chúng tôi sẽ nói về ngay bây giờ. Vì vậy, tất cả các quyền. Vì vậy, chúng ta đã thảo nguyên. Cái gì kế tiếp? Ký tự. Vì vậy, ký tự được sử dụng cho các biến sẽ lưu trữ ký tự duy nhất. Char là ngắn cho nhân vật. Và đôi khi bạn có thể nghe người phát âm nó như xe. Vì vậy, nhân vật này luôn chiếm một byte của bộ nhớ, mà chỉ là 8 bit. Vì vậy, điều này có nghĩa rằng họ chỉ có thể phù hợp giá trị trong phạm vi tiêu cực 2 với sức mạnh thứ bảy, hoặc âm 128, để 2 đến sức mạnh thứ 7 trừ đi 1, hoặc 127. Nhờ ASCII, nó là lâu rồi quyết định một cách để ánh xạ những con số tích cực từ 0-127 với những nhân vật khác nhau rằng tất cả các tồn tại trên bàn phím của chúng tôi. Vì vậy, như chúng ta sẽ thấy sau này trong khóa học, và có thể bạn sẽ đến ghi nhớ tại một số điểm, vốn A, cho example-- các nhân vật vốn A-- bản đồ đến số 65. Và lý do cho điều đó là bởi vì đó là những gì nó được phân công theo tiêu chuẩn ASCII. Chữ thường A là 97. Các nhân vật 0 cho khi bạn thực sự gõ các ký tự, không đại diện cho các số không, là 48. Bạn sẽ tìm hiểu một vài những khi bạn đi. Và bạn chắc chắn sẽ đến cần cho họ một chút sau này trong CS50. Các kiểu dữ liệu quan trọng tiếp theo được nổi số điểm. Vì vậy, số điểm nổi là còn được gọi là các số thực. Họ về cơ bản các số đó có một điểm thập phân trong họ. Nổi giá trị điểm như số nguyên cũng là chứa trong 4 byte của bộ nhớ. Bây giờ không có biểu đồ ở đây. Không có số dòng, bởi vì mô tả phạm vi của một phao là không chính xác rõ ràng hoặc trực quan. Nó đủ để nói rằng bạn có 32 bit để làm việc với. Và nếu bạn có một số như pi, trong đó có một phần số nguyên 3, và một dấu chấm động phần điểm, hoặc một phần số thập phân 0,14159, và như vậy, bạn cần phải được thể đại diện cho tất cả các it-- phần nguyên và phần thập phân. Vậy điều gì làm bạn nghĩ rằng có thể có nghĩa là? Một điều nữa là nếu các chữ số thập phân phần kéo dài hơn và dài hơn, nếu tôi có một rất lớn phần nguyên, tôi có thể không có thể được như là chính xác với phần thập phân. Và đó thực sự là giới hạn của một phao. Floats có một vấn đề chính xác. Chúng tôi chỉ có 32 bit để làm việc với, vì vậy chúng tôi chỉ có thể được chính xác như vậy với phần thập phân của chúng tôi. Chúng ta có thể không nhất thiết phải có một chữ số thập phân phần chính xác đến 100 hoặc 200 chữ số, bởi vì chúng tôi chỉ có 32 bit để làm việc với. Vì vậy, đó là một hạn chế của một phao. Bây giờ may mắn thay có kiểu dữ liệu khác được gọi là đôi, mà hơi đề với vấn đề này. Tăng gấp đôi, giống như phao, cũng được sử dụng để lưu trữ các số thực, hoặc dấu chấm động giá trị. Sự khác biệt là đôi là chính xác kép. Họ có thể phù hợp với 64 bit của dữ liệu, hoặc tám byte. Điều đó có nghĩa là gì? Vâng, nó có nghĩa là chúng ta có thể được nhiều hơn chính xác với điểm thập phân. Thay vì có pi đến bảy những nơi có thể, với một phao, chúng tôi có thể có thể có nó để 30 địa điểm. Nếu đó là quan trọng, bạn có thể muốn sử dụng một đôi thay vì một phao. Về cơ bản, nếu bạn làm việc trên bất cứ điều gì nơi có một chữ số thập phân thực sự lâu dài và rất nhiều chính xác là rất quan trọng, có thể bạn muốn sử dụng một overfloat đôi. Bây giờ cho hầu hết các công việc của bạn trong CS50, một phao là đủ. Nhưng tôi biết rằng đôi tồn tại như một cách để phần nào đối phó với độ chính xác vấn đề bằng cách cho bạn thêm 32 bit để làm việc với các con số của bạn. Bây giờ điều này không phải là một kiểu dữ liệu. Đây là một loại. Và nó được gọi là khoảng trống. Và tôi đang nói về nó ở đây bởi vì chúng tôi đã có thể nhìn thấy nó một vài lần đã có trong CS50. Và bạn có thể tự hỏi những gì nó là tất cả về. Vì vậy, khoảng trống là một loại. Nó không tồn tại. Nhưng nó không phải là một kiểu dữ liệu. Chúng tôi không thể tạo ra một biến kiểu làm mất hiệu lực và gán giá trị cho nó. Nhưng chức năng, ví dụ, có thể có một kiểu void trở lại. Về cơ bản, nếu bạn thấy một chức năng mà có một kiểu void trở lại, nó có nghĩa là nó không trả lại một giá trị. Bạn có thể nghĩ ra một phổ biến chức năng mà chúng ta đã sử dụng cho đến nay trong CS50 mà không trả lại một giá trị? Printf là một. Printf không thực sự trả lại bất cứ điều gì cho bạn. Nó in cái gì đó để màn hình, và đó là cơ bản một tác dụng phụ của những gì printf không. Nhưng nó không cung cấp cho bạn một giá trị trở lại. Bạn không nắm bắt được kết quả và lưu trữ nó trong một số biến để sử dụng nó sau này. Nó chỉ cần in một cái gì đó để màn hình và bạn đang làm. Vì vậy, chúng ta nói rằng printf là một chức năng vô hiệu. Nó trả về không có gì. Danh sách chu vi của một Chức năng này cũng có thể bị vô hiệu. Và bạn cũng đã thấy rằng khá một chút trong CS50 quá. Int void main. Điều đó rung chuông? Về cơ bản điều đó có nghĩa là chính không có bất kỳ thông số. Không có lý luận rằng có được thông qua vào chính. Bây giờ sau đó chúng ta sẽ thấy rằng có một cách để vượt qua các đối số vào chính, nhưng cho đến nay những gì chúng tôi đã nhìn thấy là int void main. Main chỉ cần không cần đối số. Và như vậy, chúng tôi xác định rằng bằng cách nói trống không. Chúng tôi chỉ đang được rất rõ ràng về thực tế rằng nó không cần đối số. Vì vậy, bây giờ, nó đủ để nói khoảng trống đó về cơ bản chỉ nên dùng như một giữ chỗ cho bạn như suy nghĩ về như không có gì. Nó không thực sự làm bất cứ điều gì. Không có giá trị trả về ở đây. Không có thông số ở đây. Đó là void. Đó là một chút phức tạp hơn thế. Nhưng điều này là đủ cho phần tốt hơn của khóa học. Và hy vọng rằng bây giờ bạn có một chút bit chi tiết của một khái niệm về những gì là vô hiệu lực. Vì vậy, đó là những năm loại bạn sẽ cuộc gặp gỡ này được xây dựng trong để C. Nhưng trong CS50 chúng tôi cũng có một thư viện. CS50.h, mà bạn có thể bao gồm. Và đó sẽ cung cấp cho bạn với hai loại thêm mà có thể bạn sẽ có thể để sử dụng trên các bài tập của bạn, hoặc chỉ làm việc thường lập trình. Việc đầu tiên trong số này là bool. Vì vậy, các kiểu dữ liệu Boolean, bool, được sử dụng cho các biến sẽ lưu trữ một giá trị Boolean. Nếu bạn đã từng nghe hạn này trước đây, bạn có thể biết rằng một Boolean giá trị có khả năng chỉ giữ hai giá trị riêng biệt khác nhau. Đúng và sai. Bây giờ điều này có vẻ khá cơ bản, phải không? Đó là loại một bất ngờ rằng điều này không tồn tại trong C như nó được xây dựng-in. Và trong nhiều ngôn ngữ hiện đại, tất nhiên, Booleans là một kiểu dữ liệu mặc định tiêu chuẩn. Nhưng trong C, họ thực sự không. Nhưng chúng ta đã tạo ra nó cho bạn. Vì vậy, nếu bạn cần để tạo ra một biến có kiểu được bool, chỉ cần chắc chắn để #include CS50.h vào đầu chương trình của bạn, và bạn sẽ có thể tạo ra biến của kiểu bool. Nếu bạn quên #include CS50.h, và bạn bắt đầu sử dụng các biến Boolean-loại, bạn có thể gặp một số vấn đề khi bạn đang biên soạn chương trình của bạn. Vì vậy, chỉ có trên Lookout cho điều đó. Và có lẽ bạn chỉ có thể sửa chữa vấn đề của bảng bao gồm CS50.h. Các kiểu dữ liệu quan trọng khác mà chúng ta cung cấp cho bạn trong thư viện CS50 là chuỗi. Vì vậy, một chuỗi là gì? Dây là thực sự chỉ là lời nói. Họ là tập hợp của các ký tự. Họ từ. Họ đang câu. Họ là đoạn văn. Có thể là toàn bộ cuốn sách, thậm chí. Rất ngắn đến rất lâu hàng loạt các nhân vật. Nếu bạn cần phải sử dụng dây, Ví dụ, để lưu trữ một từ, chỉ cần chắc chắn để bao gồm CS50.h vào đầu chương trình của bạn vì vậy bạn có thể sử dụng các loại dây. Và sau đó bạn có thể tạo ra các biến kiểu dữ liệu mà là chuỗi. Bây giờ sau này trong khóa học, chúng ta cũng sẽ thấy rằng đó là không phải là toàn bộ câu chuyện, một trong hai. Chúng ta sẽ gặp những điều gọi là cấu trúc, mà cho phép bạn nhóm những gì có thể một số nguyên và một chuỗi thành một đơn vị. Và chúng ta có thể sử dụng cho một số mục đích, mà có thể có ích sau này trong khóa học. Và chúng tôi cũng sẽ tìm hiểu về kiểu được định nghĩa, mà cho phép bạn tạo ra kiểu dữ liệu riêng của bạn. Chúng ta không cần phải lo lắng về cho bây giờ. Nhưng chỉ biết rằng đó là một cái gì đó trên đường chân trời, rằng có nhiều hơn để toàn bộ này loại điều hơn là tôi đang nói với bạn chỉ bây giờ. Vì vậy, bây giờ mà chúng tôi đã học được một chút chút về các dữ liệu cơ bản các loại và các loại dữ liệu CS50, chúng ta hãy nói về cách làm việc với các biến và tạo ra chúng bằng cách sử dụng các kiểu dữ liệu trong chương trình của chúng tôi. Nếu bạn muốn tạo ra một biến, tất cả các bạn cần làm là hai việc. Đầu tiên, bạn cần phải cung cấp cho nó một loại. Điều thứ hai bạn cần làm là cung cấp cho nó một cái tên. Một khi bạn đã làm điều đó và tát một dấu chấm phẩy ở cuối dòng đó, bạn đã tạo ra một biến. Vì vậy, đây là hai ví dụ. Số Int; thư char ;. Tôi đã làm gì ở đây? Tôi đã tạo ra hai biến. Việc đầu tiên, biến của Tên là số. Và con số này có khả năng giữ nguyên gõ các giá trị, bởi vì kiểu của nó là int. Thư là một biến khác có thể chứa ký tự vì dữ liệu của nó là char. Khá đơn giản, phải không? Nếu bạn thấy mình trong một tình huống mà bạn cần phải tạo ra nhiều biến cùng loại, bạn chỉ cần xác định các loại tên một lần. Sau đó chỉ cần liệt kê nhiều biến loại đó khi bạn cần. Vì vậy, tôi có thể cho ví dụ, ở đây ở dòng thứ ba mã này, nói int chiều cao ;, dòng mới. Int width ;. Và đó sẽ làm việc quá. Tôi vẫn muốn được gọi là hai biến chiều cao và chiều rộng, mỗi trong số đó là một số nguyên. Nhưng tôi được phép, điều cần C cú pháp, củng cố nó thành một dòng duy nhất. Int chiều cao, chiều rộng; Đó là điều tương tự. Tôi đã tạo ra hai biến, một gọi là chiều cao một gọi là chiều rộng, cả hai có khả năng nắm giữ các giá trị kiểu số nguyên. Tương tự như vậy ở đây, tôi có thể tạo ra ba nổi giá trị điểm cùng một lúc. Tôi có thể có thể tạo ra một biến được gọi là căn bậc hai của 2-- mà có lẽ sẽ cuối cùng giữ point-- nổi mà đại diện của hình vuông gốc của 2-- căn bậc hai của 3, và pi. Tôi có thể đã làm điều này trên ba dòng riêng biệt. Float, căn bậc 2; Float căn bậc 3; float pi; và rằng sẽ làm việc quá. Nhưng một lần nữa, tôi chỉ có thể củng cố này thành một dòng mã. Làm cho mọi thứ một chút ngắn hơn, không phải là khá cồng kềnh. Bây giờ nói chung, đó là thiết kế tốt để chỉ khai báo một biến khi bạn cần nó. Và chúng ta sẽ nói một chút hơn chút về điều đó sau này trong khóa học khi chúng ta thảo luận về phạm vi. Vì vậy, không nhất thiết phải cần đến tạo ra tất cả các biến của bạn ở phần đầu của chương trình, trong đó một số người có thể đã làm quá khứ, hoặc chắc chắn là một rất phổ biến mã hóa thực hành từ nhiều năm trước khi làm việc với C. Bạn có thể chỉ muốn tạo ra một biến ngay khi bạn cần nó. Được rồi. Vì vậy, chúng tôi đã tạo ra các biến. Làm thế nào để chúng ta sử dụng chúng? Sau khi chúng ta khai báo một biến, chúng ta không cần để xác định kiểu dữ liệu của biến đó nữa. Trong thực tế, nếu bạn làm như vậy, có lẽ bạn kết thúc với một số hậu quả lạ rằng chúng tôi sẽ loại bóng trên cho bây giờ. Nhưng nó đủ để nói, những điều kỳ lạ đang đi để bắt đầu xảy ra nếu bạn vô tình tái khai báo các biến có cùng tên hêt lân nay tơi lân khac. Vì vậy, ở đây tôi có bốn dòng mã. Và tôi có một vài ý kiến ​​đó chỉ cho thấy những gì đang xảy ra trên mỗi dòng chỉ để giúp đỡ bạn được nằm trong những gì đang xảy ra. Vì vậy, int số ;. Bạn thấy rằng trước đó. Đó là một khai báo biến. Bây giờ tôi đã tạo ra một biến gọi số đó là có khả năng giữ giá trị nguyên kiểu. Tôi đã tuyên bố nó. Các dòng tiếp theo tôi gán một giá trị cho số lượng. Số bằng 17. Điều gì đang xảy ra ở đó? Tôi đang đặt số 17 bên trong của biến đó. Vì vậy, nếu tôi sau đó in ra những gì các nội dung số là sau này, họ sẽ nói với tôi đó là 17. Vì vậy, tôi đã khai báo một biến, và sau đó tôi đã gán nó. Chúng tôi có thể lặp lại quá trình này một lần nữa với thư char ;. Đó là một tuyên bố. Thư bằng vốn H. Đó là một bài tập. Khá dễ dàng, quá. Bây giờ quá trình điều này có thể dường như loại ngớ ngẩn. Tại sao chúng ta làm điều này trong hai dòng mã? Có cách nào tốt hơn để làm điều đó? Trong thực tế, có. Đôi khi bạn có thể nhìn thấy này gọi là khởi tạo. Đó là khi bạn khai báo một biến và chỉ định một giá trị cùng một lúc. Đây thực sự là một khá điều phổ biến để làm. Khi bạn tạo một biến, bạn thường muốn nó có một số giá trị cơ bản. Ngay cả nếu nó là 0 hoặc một cái gì đó. Bạn chỉ cần bạn cung cấp cho nó một giá trị. Bạn có thể khởi tạo một biến. Int số bằng 17 là giống như hai dòng mã đầu tiên lên trên. Char thư bằng h là tương tự như các dòng thứ ba và thứ tư của mã trên. Các takeaway quan trọng nhất ở đây khi chúng ta khai báo và gán biến là sau khi chúng tôi đã tuyên bố, thông báo Tôi không sử dụng các kiểu dữ liệu một lần nữa. Tôi không nói rằng int số bằng 17 trên dòng thứ hai của mã, ví dụ. Tôi chỉ nói rằng số bằng 17. Một lần nữa, lại khai báo một biến sau bạn đã tuyên bố nó có thể dẫn đến một số hậu quả lạ. Vì vậy, chỉ cần cẩn thận về điều đó. Tôi Doug Lloyd. Và đây là CS50.